Windows API ——GetFileTime——获取文件时间
扫描二维码
随时随地手机看文章
FILETIME结构包含了文件或目录的日期和时间信息:(自1601年1月1日以来,单位为100纳秒)
1 typedef struct _FILETIME { 2 3 DWORD dwLowDateTime; //低32位 4 5 DWORD dwHighDateTime; //高32位 6 7 } FILETIME, *PFILETIME;
SYSTEMTIME结构包含了用户可识别的系统日期信息:
1 typedef struct _SYSTEMTIME { 2 3 WORD wYear;//年 4 5 WORD wMonth;//月 6 7 WORD wDayOfWeek;//一周的第几天 8 9 WORD wDay;//日 10 11 WORD wHour;//小时 12 13 WORD wMinute;//分 14 15 WORD wSecond;//秒 16 17 WORD wMilliseconds;//毫秒 18 19 } SYSTEMTIME, *PSYSTEMTIME;
=======================================================
函数FileTimeToSystemTime用来将文件时间格式转换为标准系统时间格式:
1 BOOL WINAPI FileTimeToSystemTime( 2 3 __in const FILETIME *lpFileTime, //文件时间 4 5 __out LPSYSTEMTIME lpSystemTime //系统时间 6 7 );
函数FileTimeToLocalTime用来将文件时间格式转换为本地文件时间:
1 BOOL WINAPI FileTimeToLocalFileTime( 2 __in const FILETIME* lpFileTime,//文件时间 3 __out LPFILETIME lpLocalFileTime//本地文件时间 4 );
函数SystemTimeToFileTime则是将标准系统时间转换成文件时间格式:
BOOL WINAPI SystemTimeToFileTime( __in const SYSTEMTIME *lpSystemTime,//系统时间 __out LPFILETIME lpFileTime//文件时间 );
函数SystemTimeToTzSpecificLocalTime是将标准系统时间转换为本地系统时间
1 BOOL WINAPI SystemTimeToTzSpecificLocalTime( 2 __in LPTIME_ZONE_INFORMATION lpTimeZone,//时区结构 3 __in LPSYSTEMTIME lpUniversalTime,//系统时间 4 __out LPSYSTEMTIME lpLocalTime//本地时间 5 );
=======================================================
GetSystemTime函数用来获得系统时间:
1 void WINAPI GetSystemTime( 2 __out LPSYSTEMTIME lpSystemTime 3 );
GetFileTime函数用来获得一个文件或目录的创建的时间、最后访问的时间以及最后修改的时间:
1 BOOL WINAPI GetFileTime( 2 __in HANDLE hFile, //文件或目录句柄 3 __out_opt LPFILETIME lpCreationTime, //返回的创建的日期和时间信息 4 __out_opt LPFILETIME lpLastAccessTime, //返回的最后访问的日期和时间信息 5 __out_opt LPFILETIME lpLastWriteTime //返回的最后修改的日期和时间信息 6 7 );
实例:
1 CString strPath("D:\test.txt"); 2 HANDLE hFile = CreateFile(strPath, 3 GENERIC_WRITE| GENERIC_READ, //必须有GENERIC_READ属性才能得到时间 4 FILE_SHARE_READ, 5 NULL, 6 TRUNCATE_EXISTING, 7 FILE_ATTRIBUTE_NORMAL, 8 NULL); 9 10 if (hFile != INVALID_HANDLE_VALUE) 11 { 12 SYSTEMTIME sysTime; 13 GetSystemTime(&sysTime);//这里得到的时间是标准系统时间,也就是0时区的时间。 14 GetLocalTime(&sysTime);//这里得到的是本地时间,也就是标准时间+时区时间 15 16 FILETIME fCreateTime, fAccessTime, fWriteTime; 17 18 GetFileTime(&hFile, &fCreateTime, &fAccessTime, &fWriteTime);//获取文件时间 19 20 CString strTime; 21 22 //将文件时间转换为本地系统时间的两种方式: 23 //(1) 24 FileTimeToLocalFileTime(&fCreateTime,&localTime);//将文件时间转换为本地文件时间 25 FileTimeToSystemTime(&localTime, &sysTime);//将文件时间转换为本地系统时间 26 27 //(2) 28 FileTimeToSystemTime(&fCreateTime, &sysTime);//将文件时间转换为标准系统时间 29 SystemTimeToTzSpecificLocalTime(&sysTime, &sysTime)//将标准系统时间转换为本地系统时间 30 31 strTime.Format(_T("%4d年%2d月%2d日,%2d:%2d:%2d"), 32 sysTime.wYear, 33 sysTime.wMonth, 34 sysTime.wDay, 35 sysTime.wHour, 36 sysTime.wMinute, 37 sysTime.wSecond 38 ); 39 }