简介描述
首先呢,介绍一下文件属性结构体,windows把一个文件的属性用一个结构体来保存,也就下面这些东西会用一个结构体来保存
结构体如下
typedef struct _WIN32_FILE_ATTRIBUTE_DATA {
DWORD dwFileAttributes;//判断一个目标为文件夹还是文档,
//目标为文档是dwFileAttributes的值为FILE_ATTRIBUTE_ARCHIVE(32),
//而为文件夹时值为FILE_ATTRIBUTE_DIRECTORY(16)
FILETIME ftCreationTime; //创建时间
FILETIME ftLastAccessTime;//修改时间
FILETIME ftLastWriteTime;//访问时间
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
} WIN32_FILE_ATTRIBUTE_DATA, *LPWIN32_FILE_ATTRIBUTE_DATA;
文件里的这个ftCreationTime
它是以一串数字(FILETIME类型的数据)来保存的,具体是代表FILETIME
类型的创建文件时的世界标准时间 数字,所以需要把它转换成本地的FILETIME
时间,最后再把本地的FILETIME
时间转换成SYSTEM
时间,这个才能让我们能看懂。
FILETIME: 文件时间结构----由高位和低位组成,指针可用LPFILETIME 或 PFILETIME
typedef struct _FILETIME
{
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME, *PFILETIME, *LPFILETIME;
SYSTEMTIME :系统时间结构----指针可用PSYSTEMTIME 或 LPSYSTEMTIME
typedef struct _SYSTEMTIME
{
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
GetFileAttributesEx函数讲解
GetFileAttributesEx(L"读取文件属性代码.cpp", GetFileExInfoStandard, &wafd
第一个参数
第一个参数传入文件名即可,如果是Unicode编译环境下(即宽字节),再加一个L即可。
第二个参数
当第二个参数传入GetFileExInfoStandard后,第三个参数就可以传入_WIN32_FILE_ATTRIBUTE_DATA
结构体对象
第三个参数
传入_WIN32_FILE_ATTRIBUTE_DATA
结构体对象,就可以获取为第一个文件名的文件属性信息
返回值
如果成功,返回值包含文件或目录的属性。如果失败,返回值是INVALID_FILE_ATTRIBUTES。
部分代码讲解
FileTimeToLocalFileTime(lptime, &ftlocal);
这个函数是把UTC(世界标准时间)的FILETIME
时间转换为对应的本地的FILETIME
时间
FileTimeToSystemTime(&ftlocal, &st);
这个函数是把对应的本地的FILETIME
时间转换成SYSTEM
时间,然后再直接输出相应的时间点
这里稍微补充一下一个相关函数:
LocalFileTimeToFileTime
函数将本地的FILETIME
时间转换为对应的UTC的FILETIME
时间。
代码实现:
#include <iostream>
#include<windows.h>
DWORD ShowFileTime(PFILETIME lptime) {
FILETIME ftlocal;
SYSTEMTIME st;
FileTimeToLocalFileTime(lptime, &ftlocal);
FileTimeToSystemTime(&ftlocal, &st);
printf("%d年%#02d月%#02d日,%#02d:%#02d:%#02d\n", st.wYear, st.wMonth, st.wDay,st.wHour,st.wMinute,st.wSecond);
return 0;
}
int main()
{
WIN32_FILE_ATTRIBUTE_DATA wafd;
if (!GetFileAttributesEx(L"读取文件属性代码.cpp", GetFileExInfoStandard, &wafd)) {
printf("获取文件属性失败:%d\n",GetLastError());
return 1;
}
printf("创建时间:");
ShowFileTime(&wafd.ftCreationTime);
printf("修改实际:");
ShowFileTime(&wafd.ftLastAccessTime);
printf("访问时间:");
ShowFileTime(&wafd.ftLastWriteTime);
}
备注:
2021年坚持学写博客第4天(学习两个windows API) 寻梦SS
明日目标:
windows核心编程API函数