博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[WinAPI] API 14 [获取、设置文件属性和时间]
阅读量:6224 次
发布时间:2019-06-21

本文共 6421 字,大约阅读时间需要 21 分钟。

 

 

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

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使用这个结构表示返回结果,包括文件属性、文件创建时间、文件最后访问时间、文件最后写入时间和文件大小。

 

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

 

 

1 // 获取、设置文件属性和时间  2 #include 
3 #include
4 5 /* 函数申明 */ 6 DWORD ShowFileTime(PFILETIME lptime); 7 DWORD ShowFileSize(DWORD dwFileSizeHigh,DWORD dwFileSizeLow); 8 DWORD ShowFileAttrInfo(DWORD dwAttribute); 9 DWORD SetFileHiddenAndReadonly(LPSTR szFileName); 10 11 /* ************************************ 12 * DWORD ShowFileAttributes(LPSTR szPath) 13 * 功能 获取并显示文件属性, 14 * 调用ShowFileTime、ShowFileSize和 15 * ShowFileAttrInfo函数 16 * 17 * 参数 LPTSTR szPath,获取并显示此文件的属性 18 * 19 * 返回值 0代表执行完成,1代码发生错误 20 **************************************/ 21 DWORD ShowFileAttributes(LPSTR szPath) 22 { 23 //文件属性结构 24 WIN32_FILE_ATTRIBUTE_DATA wfad; 25 printf("文件:%s\n",szPath); 26 //获取文件属性 27 if(!GetFileAttributesExA(szPath, 28 GetFileExInfoStandard, 29 &wfad)) 30 { 31 printf("获取文件属性错误:%d\n",GetLastError()); 32 return 1; 33 } 34 //显示相关时间 35 printf("创建时间:\t"); 36 ShowFileTime(&(wfad.ftCreationTime)); 37 printf("最后访问时间:\t"); 38 ShowFileTime(&(wfad.ftLastAccessTime)); 39 printf("最后修改时间:\t"); 40 ShowFileTime(&(wfad.ftLastWriteTime)); 41 //显示文件大小 42 ShowFileSize(wfad.nFileSizeHigh,wfad.nFileSizeLow); 43 //显示文件属性 44 ShowFileAttrInfo(wfad.dwFileAttributes); 45 46 return 0; 47 } 48 /* ************************************ 49 * DWORD ShowFileAttrInfo(DWORD dwAttribute) 50 * 功能 打印将文件属性 51 * 52 * 参数 DWORD dwAttribute,文件属性 53 * 54 * 返回值 0 55 **************************************/ 56 DWORD ShowFileAttrInfo(DWORD dwAttribute) 57 { 58 //依次判断属性,并显示。 59 printf("文件属性:\t"); 60 if(dwAttribute&FILE_ATTRIBUTE_ARCHIVE) 61 printf("
"); 62 if(dwAttribute&FILE_ATTRIBUTE_COMPRESSED) 63 printf("
<压缩>
"); 64 if(dwAttribute&FILE_ATTRIBUTE_DIRECTORY) 65 printf("
<目录>
"); 66 if(dwAttribute&FILE_ATTRIBUTE_ENCRYPTED) 67 printf("
<加密>
"); 68 if(dwAttribute&FILE_ATTRIBUTE_HIDDEN) 69 printf("
<隐藏>
"); 70 if(dwAttribute&FILE_ATTRIBUTE_NORMAL) 71 printf("
"); 72 if(dwAttribute&FILE_ATTRIBUTE_OFFLINE) 73 printf("
"); 74 if(dwAttribute&FILE_ATTRIBUTE_READONLY) 75 printf("
<只读>
"); 76 if(dwAttribute&FILE_ATTRIBUTE_SPARSE_FILE) 77 printf("
"); 78 if(dwAttribute&FILE_ATTRIBUTE_SYSTEM) 79 printf("
<系统文件>
"); 80 if(dwAttribute&FILE_ATTRIBUTE_TEMPORARY) 81 printf("
<临时文件>
"); 82 83 printf("\n"); 84 85 return 0; 86 } 87 /* ************************************ 88 * DWORD ShowFileSize(DWORD dwFileSizeHigh, DWORD dwFileSizeLow) 89 * 功能 打印文件大小信息 90 * 91 * 参数 DWORD dwFileSizeHigh,文件大小高32位 92 * DWORD dwFileSizeLow,文件大小低32位 93 * 94 * 返回值 0 95 **************************************/ 96 DWORD ShowFileSize(DWORD dwFileSizeHigh, DWORD dwFileSizeLow) 97 { 98 ULONGLONG liFileSize; 99 liFileSize = dwFileSizeHigh;100 101 //高们移动32位102 liFileSize <<= sizeof(DWORD)*8;103 liFileSize += dwFileSizeLow;104 printf("文件大小:\t%I64u 字节\n",liFileSize);105 return 0;106 }107 /* ************************************108 *DWORD ShowFileTime(PFILETIME lptime)109 * 功能 轮换文件时间,将打印110 *111 * 参数 PFILETIME lptime,指向文件时间的指针112 *113 * 返回值 0114 **************************************/115 DWORD ShowFileTime(PFILETIME lptime)116 {117 //文件时间结构118 FILETIME ftLocal;119 //系统时间结构120 SYSTEMTIME st;121 //调整为系统所在时区的时间122 FileTimeToLocalFileTime(123 lptime,124 &ftLocal125 );126 //将文件时间转换为SYSTEMTIME格式,便于显示。127 FileTimeToSystemTime(128 &ftLocal,129 &st130 );131 //显示时间信息字符串132 printf("%4d年%.2d月%#02d日,%.2d:%.2d:%.2d\n",133 st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond);134 135 return 0;136 }137 /* ************************************138 * DWORD SetFileHiddenAndReadonly(LPSTR szFileName)139 * 功能 将指定的文件设置为隐藏和只读140 *141 * 参数 LPSTR szFileName,文件路径142 *143 * 返回值 0144 **************************************/145 DWORD SetFileHiddenAndReadonly(LPSTR szFileName)146 {147 //获取原来的文件属性148 DWORD dwFileAttributes = GetFileAttributesA(szFileName);149 //将只读和隐藏属性附加到原来的文件属性上150 dwFileAttributes |= FILE_ATTRIBUTE_READONLY;151 dwFileAttributes |= FILE_ATTRIBUTE_HIDDEN;152 //设置文件属性,并判断是否成功。153 if(SetFileAttributesA(szFileName, dwFileAttributes))154 {155 printf("文件%s的隐藏和属性设置成功\n",szFileName);156 }157 else158 {159 printf("属性设置; %d\n",GetLastError());160 }161 return 0;162 }163 /* ************************************164 * int main(int argc, PCHAR argv[])165 * 功能 设置和获取文件属性等166 *167 * 参数 显示第一个参数指定文件的属性、时间、大小168 * 将第二个参数的属性设置为隐藏、只读。169 *170 * 返回值 0代表执行完成,1代码发生错误171 **************************************/172 int main(int argc, PCHAR argv[])173 { 174 char str1[100];175 char str2[100];176 printf("请输入参数\n");177 scanf("%s",str1);scanf("%s",str2);178 179 ShowFileAttributes(str1);180 SetFileHiddenAndReadonly(str2);181 return 0;182 }

 

转载地址:http://ppyna.baihongyu.com/

你可能感兴趣的文章
[MicroPython]TurniBit开发板DIY自动窗帘模拟系统
查看>>
由String类的Split方法所遇到的两个问题
查看>>
Python3.4 12306 2015年3月验证码识别
查看>>
从Handler.post(Runnable r)再一次梳理Android的消息机制(以及handler的内存泄露)
查看>>
windows查看端口占用
查看>>
Yii用ajax实现无刷新检索更新CListView数据
查看>>
JDBC的事务
查看>>
Io流的概述
查看>>
App 卸载记录
查看>>
JavaScript变量和作用域
查看>>
开源SIP服务器加密软件NethidPro升级
查看>>
百度页面分享插件源代码
查看>>
《别做正常的傻瓜》的一些读书心得
查看>>
作业:实现简单的shell sed替换功能和修改haproxy配置文件
查看>>
spring配置多数据源问题
查看>>
Altium 拼板方法以及 注意的 地方
查看>>
简明Linux命令行笔记:tail
查看>>
PMP考试的过与只是
查看>>
java 监控 收集资料3(收集中)
查看>>
实例演示如何使用AgileEAS.NET SOA平台工作流进行业务流程自定义
查看>>