>_< 为了获取文件属性,用户可以使用GetFileAttributes与GetFileAttributesEx函数。

GetFileAttributesEx函数除了返回文件属性外,还返回文件时间信息、文件大小等。
GetFileAttributesEx将返回结果保存在WIN32_FILE_ATTRIBUTE DATA结构中。
>_< 获取的文件时间是以FILETIME格式存在的,如果要正确显示,还需要对其时区进行调整,调整为本地时区,然后转换为系统时间格式,便于显示。
>_< 前面在获取文件大小时已经介绍,NTFS文件系统使用了64位数据来表示文件大小。因为32位的数据最多只能表示4GB的大小。Windows将其分为了高32位和低32位,两个都需要使用到,这一点尤其要在对大于4GB的文件操作时注意。

(1)GetFileAttributeS。
获取文件或目录的属牲

◇参数
lpFileName:输入参数,为需要获取属性的文件或目录。 、
◇返回值
返回DWORD值,表示文件属性。如果返回INVALID_FILE ATTRIBUTES,则表示失败。可使用GetLastError函数获取错误信息。
◇使用说明
要判断文件具体有哪些属性,需要使用“&”与属性常量进行运算,如果运行结果为真,则表示具有这种属性。

(2)GetFileAttributesEx。
获取文件或目录的属性、时间、大小,以WIN32_FILE ATTRIBUTE_DATA结构的形式返回结果

◇参数
lpFileName:输入参数,为需要获取属性的文件或目录。
flnfoLevelId:输入参数,是获取文件属性信息的类别,会影响到lpFileInformation参数具体采用什么形式输出结果。但是本参数一般只能指定为GetFileExInfoStandard。
lpFileInformation:输出参数,用于返回结果。如果flnfoLevelId参数指定为GetFileExInfoStandard,则为LPWIN32_FILE_ATTRIBUTE_ DATA类型。
◇返回值
返回BOOL值,表示是否成功。

(3) SetFileAttributes.
设置文件或目录的属性

◇参数
lpFileName:输入参数,为需要设置属性的文件或目录。
dwFileAttributes:文件属性值。
◇返回值
返回BOOL值,表示是否成功。
◇使用说明
文件系统中对文件属性的表示使用了DWORD类型的数据,多个文件属性使用“【”运算连接在一起

(4)FileTimeToLocalFileTime。
把文件时间转换为本地的文件时间

◇参数
lpFileTime:输入参数,为需要转换的文件时间。
lpLocalFileTime:输出参数,为指向转换后的文件时间。
◇返回值
返回BOOL值,表示是否成功。

(5)FileTimeToSystemTime
将文件时间转换为系统时间(SYSTEMTIME格式),便于显示

◇参数
lpFileTime:输入参数,指向需要转换的文件时间。
lpSystemTime:输出参数,指向转换后的SYSTEMTIME。
◇返回值
返回BOOL值,表示是否成功。

>_< 关键数据结构

(1) FILETIM。
此结构用最小的数据量表示的时间,但是不便于用户查看和显示。通过API获取的系统时间都是这种格式的。如果要使用显示,可以使用FileTimeToSystemTime转换为便于显示的SYSTEMTIME结构

(2) SYSTEMTIME。
此结构使用了较为直观的方式表示时间。

(3) WIN32_FILE ATTRIBUTE_DATA。
GetFileAttributesEx使用这个结构表示返回结果,包括文件属性、文件创建时间、文件最后访问时间、文件最后写入时间和文件大小。

>>>本实例编译完成后是一个可执行文件,运行时需输入两个参数,均是文件路径,程序将第一个参数所指向的文件和目录的属性显示出来,将第二个参数所指向的文件或目录设置为隐藏和只读。

 // 获取、设置文件属性和时间
#include <windows.h>
#include <stdio.h> /* 函数申明 */
DWORD ShowFileTime(PFILETIME lptime);
DWORD ShowFileSize(DWORD dwFileSizeHigh,DWORD dwFileSizeLow);
DWORD ShowFileAttrInfo(DWORD dwAttribute);
DWORD SetFileHiddenAndReadonly(LPSTR szFileName); /* ************************************
* DWORD ShowFileAttributes(LPSTR szPath)
* 功能 获取并显示文件属性,
* 调用ShowFileTime、ShowFileSize和
* ShowFileAttrInfo函数
*
* 参数 LPTSTR szPath,获取并显示此文件的属性
*
* 返回值 0代表执行完成,1代码发生错误
**************************************/
DWORD ShowFileAttributes(LPSTR szPath)
{
//文件属性结构
WIN32_FILE_ATTRIBUTE_DATA wfad;
printf("文件:%s\n",szPath);
//获取文件属性
if(!GetFileAttributesExA(szPath,
GetFileExInfoStandard,
&wfad))
{
printf("获取文件属性错误:%d\n",GetLastError());
return ;
}
//显示相关时间
printf("创建时间:\t");
ShowFileTime(&(wfad.ftCreationTime));
printf("最后访问时间:\t");
ShowFileTime(&(wfad.ftLastAccessTime));
printf("最后修改时间:\t");
ShowFileTime(&(wfad.ftLastWriteTime));
//显示文件大小
ShowFileSize(wfad.nFileSizeHigh,wfad.nFileSizeLow);
//显示文件属性
ShowFileAttrInfo(wfad.dwFileAttributes); return ;
}
/* ************************************
* DWORD ShowFileAttrInfo(DWORD dwAttribute)
* 功能 打印将文件属性
*
* 参数 DWORD dwAttribute,文件属性
*
* 返回值 0
**************************************/
DWORD ShowFileAttrInfo(DWORD dwAttribute)
{
//依次判断属性,并显示。
printf("文件属性:\t");
if(dwAttribute&FILE_ATTRIBUTE_ARCHIVE)
printf("<ARCHIVE> ");
if(dwAttribute&FILE_ATTRIBUTE_COMPRESSED)
printf("<压缩> ");
if(dwAttribute&FILE_ATTRIBUTE_DIRECTORY)
printf("<目录> ");
if(dwAttribute&FILE_ATTRIBUTE_ENCRYPTED)
printf("<加密> ");
if(dwAttribute&FILE_ATTRIBUTE_HIDDEN)
printf("<隐藏> ");
if(dwAttribute&FILE_ATTRIBUTE_NORMAL)
printf("<NORMAL> ");
if(dwAttribute&FILE_ATTRIBUTE_OFFLINE)
printf("<OFFLINE> ");
if(dwAttribute&FILE_ATTRIBUTE_READONLY)
printf("<只读> ");
if(dwAttribute&FILE_ATTRIBUTE_SPARSE_FILE)
printf("<SPARSE> ");
if(dwAttribute&FILE_ATTRIBUTE_SYSTEM)
printf("<系统文件> ");
if(dwAttribute&FILE_ATTRIBUTE_TEMPORARY)
printf("<临时文件> "); printf("\n"); return ;
}
/* ************************************
* DWORD ShowFileSize(DWORD dwFileSizeHigh, DWORD dwFileSizeLow)
* 功能 打印文件大小信息
*
* 参数 DWORD dwFileSizeHigh,文件大小高32位
* DWORD dwFileSizeLow,文件大小低32位
*
* 返回值 0
**************************************/
DWORD ShowFileSize(DWORD dwFileSizeHigh, DWORD dwFileSizeLow)
{
ULONGLONG liFileSize;
liFileSize = dwFileSizeHigh; //高们移动32位
liFileSize <<= sizeof(DWORD)*;
liFileSize += dwFileSizeLow;
printf("文件大小:\t%I64u 字节\n",liFileSize);
return ;
}
/* ************************************
*DWORD ShowFileTime(PFILETIME lptime)
* 功能 轮换文件时间,将打印
*
* 参数 PFILETIME lptime,指向文件时间的指针
*
* 返回值 0
**************************************/
DWORD ShowFileTime(PFILETIME lptime)
{
//文件时间结构
FILETIME ftLocal;
//系统时间结构
SYSTEMTIME st;
//调整为系统所在时区的时间
FileTimeToLocalFileTime(
lptime,
&ftLocal
);
//将文件时间转换为SYSTEMTIME格式,便于显示。
FileTimeToSystemTime(
&ftLocal,
&st
);
//显示时间信息字符串
printf("%4d年%.2d月%#02d日,%.2d:%.2d:%.2d\n",
st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond); return ;
}
/* ************************************
* DWORD SetFileHiddenAndReadonly(LPSTR szFileName)
* 功能 将指定的文件设置为隐藏和只读
*
* 参数 LPSTR szFileName,文件路径
*
* 返回值 0
**************************************/
DWORD SetFileHiddenAndReadonly(LPSTR szFileName)
{
//获取原来的文件属性
DWORD dwFileAttributes = GetFileAttributesA(szFileName);
//将只读和隐藏属性附加到原来的文件属性上
dwFileAttributes |= FILE_ATTRIBUTE_READONLY;
dwFileAttributes |= FILE_ATTRIBUTE_HIDDEN;
//设置文件属性,并判断是否成功。
if(SetFileAttributesA(szFileName, dwFileAttributes))
{
printf("文件%s的隐藏和属性设置成功\n",szFileName);
}
else
{
printf("属性设置; %d\n",GetLastError());
}
return ;
}
/* ************************************
* int main(int argc, PCHAR argv[])
* 功能 设置和获取文件属性等
*
* 参数 显示第一个参数指定文件的属性、时间、大小
* 将第二个参数的属性设置为隐藏、只读。
*
* 返回值 0代表执行完成,1代码发生错误
**************************************/
int main(int argc, PCHAR argv[])
{
char str1[];
char str2[];
printf("请输入参数\n");
scanf("%s",str1);scanf("%s",str2); ShowFileAttributes(str1);
SetFileHiddenAndReadonly(str2);
return ;
}

[WinAPI] API 14 [获取、设置文件属性和时间]的更多相关文章

  1. [WinAPI] API 12 [获取程序所在的目录、程序模块路径,获取和设置当前目录]

    Windows系统提供一组API实现对程序运行时相关目录的获取和设置.用户可以使用GetCurrentDirectory和SetCurrentDirectory获取程序的当前目录,获取模块的路径使用G ...

  2. [WinAPI] API 8 [获取磁盘空间信息]

    获取磁盘分区的总容量和空闲空间的容量可以使用GetDiskFreeSpace函数或GetDiskFree SpaceEx函数.GetDiskFreeSpace使用DWORD类型作为输出参数,由于DWO ...

  3. [WinAPI] API 3 [获取系统目录,并保存在文件里]

    /* 获取系统目录,并保存在文件里 [peoject->set->link->project chose->subsystem:console] */ #include< ...

  4. VC++ 获取文件属性创建时间、修改时间和访问时间

    转载:http://blog.sina.com.cn/s/blog_66bf8d8301014ikd.html WIN32_FIND_DATA结构 关于文件的全部属性信息,总计有以下以下9 种:文件的 ...

  5. [VB.NET]调用API获取/设置键盘按键状态

    1.调用GetAsyncKeyState()获取指定按键的状态,GetActiveKey()检索指定范围内的按键状态 2.调用keybd_event()可合成一次击键事件,通常两次击键事件间需要设定时 ...

  6. Redis 过期键的设置、获取和删除过期时间

    Redis 过期键的设置.获取和删除过期时间 转自http://blog.51cto.com/littledevil/1813956 设置过期 默认情况下键是没有生存时间的,也就是永不过期,除非清空内 ...

  7. 【开源项目13】Volley框架 以及 设置request超时时间

    Volley提供了优美的框架,使android程序网络访问更容易.更快. Volley抽象实现了底层的HTTP Client库,我们不需关注HTTP Client细节,专注于写出更加漂亮.干净的RES ...

  8. 转 HttpClient 设置连接超时时间

    要: HttpClient 4.5版本升级后,设置超时时间的API又有新的变化,请大家关注. HttpClient升级到4.5版本后,API有很多变化,HttpClient 4之后,API一直没有太稳 ...

  9. Javaweb设置session过期时间

    在Java Web开发中,Session为我们提供了很多方便,Session是由浏览器和服务器之间维护的.Session超时理解为:浏览器和服务器之间创建了一个Session,由于客户端长时间(休眠时 ...

随机推荐

  1. 关于公司VPN专线接入的一个案例

    最近互通网络技术部门收到一到封邮件,是关于公司VPN接入的问题,问题如下: 条件:A区为办公地点1,其他办公电脑20台,并通过写字楼的宽带接口联通外网. B区为新办公地点2,预设应用.数据库.备份服务 ...

  2. LR_问题_平均响应时间解释,summary与analysis不一致

    Summary Report中的时间说明 Summary是按整个场景的时间来做平均的,最大最小值,也是从整个场景中取出来的. (1)       平均响应时间:事物全部响应时间做平均计算 (2)    ...

  3. 使用 DiskMaker X 轻松制作 Yosemite 安装 U 盘(引)

    使用 DiskMaker X 轻松制作 Yosemite 安装 U 盘 由于帮人在MacBook上装Windows, 用pe格式化了一下分出来的Windows分区, 搞得Mac系统也瘫掉了, 无奈之下 ...

  4. java基金会 之 HashMap统计csvWord文档

    一:知识的补充( 这个HashMap Map 和 c++的Map还是有非常大的区别,惊人的差异大的人,当然,两者的作用是相同的,但函数名出一个非常大的.即使iterator的差是非常大的 ) (1)H ...

  5. Vue.js-05:第五章 - 计算属性与监听器

    一.前言 在 Vue 中,我们可以很方便的将数据使用插值表达式( Mustache 语法)的方式渲染到页面元素中,但是插值表达式的设计初衷是用于简单运算,即我们不应该对差值做过多的操作.当我们需要对差 ...

  6. nginx反向代理后应用程序如何获取客户端真实IP

    每个location中增加配置: proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_se ...

  7. Egg入门学习(一)

    一:什么是Egg? 它能做什么?Egg.js是nodejs的一个框架,它是基于koa框架的基础之上的上层框架,它继承了koa的,它可以帮助开发人员提高开发效率和维护成本.Egg约定了一些规则,在开发中 ...

  8. 【转】python f-string

    [转]python f-string   文章目录 1. 主要内容 1.1. 旧时代的格式化字符串 1.1.1. Option #1: %-formatting 1.1.2. 怎样使用 %-forma ...

  9. unity &quot;[ ]&quot;标签

    [CanEditMultipleObjects]//可多对象编辑 public class Collider2DEditor:Editor {} [SerializeField]//序列化私有属性 p ...

  10. spring、springmvc和mybatis整合(java config方式)

    之前项目中使用ssm框架大多是基于xml的方式,spring3.0以后就提供java config的模式来构建项目,并且也推荐使用这种方式,自从接触过springboot后,深深感受到这种纯java配 ...