WindowsAPI --Windows数据结构
GetFileAttributesEx()
GetFileAttributesEx()获取指定文件或目录的文件系统的属性信息。如果要实现交互式操作,可以使用GetFileAttributesTransacted 函数。
参数:
lpFileName[in]:文件或目录的名字,对于ANSI版本,名字不能大于MAX_PATH(260)。
返回值:
如果成功,返回值包含文件或目录的属性。如果失败,返回值是INVALID_FILE_ATTRIBUTES。
两个结构:
1、FILETIME: 文件时间结构----由高位和低位组成,指针可用LPFILETIME 或 PFILETIME
typedef struct _FILETIME
{
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME, *PFILETIME, *LPFILETIME;
2、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;
文件属性: WIN32_FILE_ATTRIBUTES_DATA
typedef struct _WIN32_FILE_ATTRIBUTE_DATA
{
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
} WIN32_FILE_ATTRIBUTE_DATA, *LPWIN32_FILE_ATTRIBUTE_DATA;
文件的属性、文件的创建时间、文件的最后访问时间,文件的最后写入时间,文件的大小,分高位和低位
几个文件时间转换函数:
FileTimeToDosDateTime(): 将文件时间转换为MS-DOS日期
FileTimeToLocalFileTime(): 将UTC文件时间转换成本地文件时间
FileTimeToSystemTime(): 将64位时间转换为系统时间
案例程序:
功能:获取文件属性(时间为例)
#include<Windows.h>
#include<stdio.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 wfad;
if (!GetFileAttributesEx("Windows Struct.cpp", GetFileExInfoStandard, &wfad))
{
printf("获取文件属性失败:%d\n", GetLastError());
return 1;
}
printf("创建时间:\t");
ShowFileTime(&wfad.ftCreationTime);
printf("最后访问时间:\t");
ShowFileTime(&wfad.ftLastAccessTime);
printf("修改时间:\t");
ShowFileTime(&wfad.ftLastWriteTime);
system("pause");
return 0;
}