[WinAPI] API 14 [获取、设置文件属性和时间]

简介:


 

 

>_< 为了获取文件属性,用户可以使用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 <windows.h>
  3 #include <stdio.h>
  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("<ARCHIVE> ");
 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("<NORMAL> ");
 72     if(dwAttribute&FILE_ATTRIBUTE_OFFLINE)
 73         printf("<OFFLINE> ");
 74     if(dwAttribute&FILE_ATTRIBUTE_READONLY)
 75         printf("<只读> ");
 76     if(dwAttribute&FILE_ATTRIBUTE_SPARSE_FILE)
 77         printf("<SPARSE> ");
 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  * 返回值 0
114  **************************************/
115 DWORD ShowFileTime(PFILETIME lptime)
116 {
117     //文件时间结构
118     FILETIME ftLocal;
119     //系统时间结构
120     SYSTEMTIME st;
121     //调整为系统所在时区的时间
122     FileTimeToLocalFileTime(
123         lptime,
124         &ftLocal
125         );
126     //将文件时间转换为SYSTEMTIME格式,便于显示。
127     FileTimeToSystemTime(
128         &ftLocal,
129         &st
130         );
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  * 返回值 0
144  **************************************/
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     else
158     {
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 }
复制代码
相关文章
|
3月前
|
数据采集 存储 API
Python爬虫结合API接口批量获取PDF文件
Python爬虫结合API接口批量获取PDF文件
|
10月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
261 2
|
5月前
|
API 开发者 Python
深入研究:1688商品跨境属性API接口详解
本文介绍了如何通过 1688 商品跨境属性 API 获取商品的跨境相关数据,助力企业开展电商业务。文章分为三部分:引言阐述了接口的重要性及应用场景;接口概述详细说明了调用步骤,包括参数准备、签名生成、请求发送和响应处理;Python 请求示例提供了一个完整的代码实现,帮助开发者快速上手。示例代码涵盖了请求参数配置、签名生成逻辑以及使用 requests 库发送请求的过程,为实际应用提供了参考。
164 13
|
6月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
7月前
|
数据采集 算法 Java
如何在Java爬虫中设置动态延迟以避免API限制
如何在Java爬虫中设置动态延迟以避免API限制
|
9月前
|
API 开发者 UED
自学记录鸿蒙API 13:PreviewKit从文件预览到应用开发
通过学习API 13,我深入研究了**PreviewKit(文件预览服务)**。该模块支持快速预览多种文件类型(文本、图片、视频、音频、PDF等),为文件管理类应用提供系统级支持。本文分享了从搭建开发环境到实现单文件和多文件预览的全过程,并介绍了如何构建一个实用的文件预览助手应用。通过实践,不仅掌握了技术细节,还提升了个人开发能力。希望这些经验能为其他开发者带来启发与帮助。
191 10
自学记录鸿蒙API 13:PreviewKit从文件预览到应用开发
|
6月前
|
自然语言处理 安全 API
1688 跨境属性 API 接口(1688API 系列)
1688跨境属性API助力跨境电商发展,提供商品目标市场适配、跨境物流、国际认证及语言文化属性等数据,支持HTTP GET/POST请求。开发者可通过商品ID、目标市场代码和语言参数精准获取信息,提升业务效率与精准度。示例代码展示了如何使用Python进行GET请求,获取商品跨境属性,确保数据准确可靠。
|
Java API 开发者
【Java字节码的掌控者】JDK 22类文件API:解锁Java深层次的奥秘,赋能开发者无限可能!
【9月更文挑战第8天】JDK 22类文件API的引入,为Java开发者们打开了一扇通往Java字节码操控新世界的大门。通过这个API,我们可以更加深入地理解Java程序的底层行为,实现更加高效、可靠和创新的Java应用。虽然目前它还处于预览版阶段,但我们已经可以预见其在未来Java开发中的重要地位。让我们共同期待Java字节码操控新篇章的到来,并积极探索类文件API带来的无限可能!
|
29天前
|
JSON API 数据格式
淘宝/天猫图片搜索API接口,json返回数据。
淘宝/天猫平台虽未开放直接的图片搜索API,但可通过阿里妈妈淘宝联盟或天猫开放平台接口实现类似功能。本文提供基于淘宝联盟的图片关联商品搜索Curl示例及JSON响应说明,适用于已获权限的开发者。如需更高精度搜索,可选用阿里云视觉智能API。
|
27天前
|
JSON API 数据安全/隐私保护
深度分析淘宝卖家订单详情API接口,用json返回数据
淘宝卖家订单详情API(taobao.trade.fullinfo.get)是淘宝开放平台提供的重要接口,用于获取单个订单的完整信息,包括订单状态、买家信息、商品明细、支付与物流信息等,支撑订单管理、ERP对接及售后处理。需通过appkey、appsecret和session认证,并遵守调用频率与数据权限限制。本文详解其使用方法并附Python调用示例。