WINDOWS API ——GETFILETIME——獲取文件時間
阿新 • • 發佈:2017-09-29
read alt ros etl seconds string typedef exist 本地文件
FILETIME結構包含了文件或目錄的日期和時間信息:(自1601年1月1日以來,單位為100納秒)
typedef struct _FILETIME { DWORD dwLowDateTime; //低32位 DWORD dwHighDateTime; //高32位 } FILETIME, *PFILETIME;
SYSTEMTIME結構包含了用戶可識別的系統日期信息:
typedef struct _SYSTEMTIME { WORD wYear;//年 WORD wMonth;//月 WORD wDayOfWeek;//一周的第幾天WORD wDay;//日 WORD wHour;//小時 WORD wMinute;//分 WORD wSecond;//秒 WORD wMilliseconds;//毫秒 } SYSTEMTIME, *PSYSTEMTIME;
=======================================================
函數FileTimeToSystemTime用來將文件時間格式轉換為標準系統時間格式:
BOOL WINAPI FileTimeToSystemTime( __inconst FILETIME *lpFileTime, //文件時間 __out LPSYSTEMTIME lpSystemTime //系統時間 );
函數FileTimeToLocalTime用來將文件時間格式轉換為本地文件時間:
BOOL WINAPI FileTimeToLocalFileTime( __in const FILETIME* lpFileTime,//文件時間 __out LPFILETIME lpLocalFileTime//本地文件時間 );
函數SystemTimeToFileTime則是將標準系統時間轉換成文件時間格式:
BOOL WINAPI SystemTimeToFileTime( __in const SYSTEMTIME *lpSystemTime,//系統時間 __out LPFILETIME lpFileTime//文件時間 );
函數SystemTimeToTzSpecificLocalTime是將標準系統時間轉換為本地系統時間
BOOL WINAPI SystemTimeToTzSpecificLocalTime( __in LPTIME_ZONE_INFORMATION lpTimeZone,//時區結構 __in LPSYSTEMTIME lpUniversalTime,//系統時間 __out LPSYSTEMTIME lpLocalTime//本地時間 );
=======================================================
GetSystemTime函數用來獲得系統時間:
void WINAPI GetSystemTime( __out LPSYSTEMTIME lpSystemTime );
GetFileTime函數用來獲得一個文件或目錄的創建的時間、最後訪問的時間以及最後修改的時間:
BOOL WINAPI GetFileTime( __in HANDLE hFile, //文件或目錄句柄 __out_opt LPFILETIME lpCreationTime, //返回的創建的日期和時間信息 __out_opt LPFILETIME lpLastAccessTime, //返回的最後訪問的日期和時間信息 __out_opt LPFILETIME lpLastWriteTime //返回的最後修改的日期和時間信息 );
實例:
CString strPath("D:\\test.txt"); HANDLE hFile = CreateFile(strPath, GENERIC_WRITE| GENERIC_READ, //必須有GENERIC_READ屬性才能得到時間 FILE_SHARE_READ, NULL, TRUNCATE_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile != INVALID_HANDLE_VALUE) { SYSTEMTIME sysTime; GetSystemTime(&sysTime);//這裏得到的時間是標準系統時間,也就是0時區的時間。 GetLocalTime(&sysTime);//這裏得到的是本地時間,也就是標準時間+時區時間 FILETIME fCreateTime, fAccessTime, fWriteTime; GetFileTime(&hFile, &fCreateTime, &fAccessTime, &fWriteTime);//獲取文件時間 CString strTime; //將文件時間轉換為本地系統時間的兩種方式: //(1) FileTimeToLocalFileTime(&fCreateTime,&localTime);//將文件時間轉換為本地文件時間 FileTimeToSystemTime(&localTime, &sysTime);//將文件時間轉換為本地系統時間 //(2) FileTimeToSystemTime(&fCreateTime, &sysTime);//將文件時間轉換為標準系統時間 SystemTimeToTzSpecificLocalTime(&sysTime, &sysTime)//將標準系統時間轉換為本地系統時間 strTime.Format(_T("%4d年%2d月%2d日,%2d:%2d:%2d"), sysTime.wYear, sysTime.wMonth, sysTime.wDay, sysTime.wHour, sysTime.wMinute, sysTime.wSecond ); }
修文件創建時間,例子:
#include <Windows.h> #include <stdio.h> bool ConvertFileTimeToLocalTime(const FILETIME *lpFileTime, SYSTEMTIME *lpSystemTime) { if (!lpFileTime || !lpSystemTime) { return false; } FILETIME ftLocal; FileTimeToLocalFileTime(lpFileTime, &ftLocal); FileTimeToSystemTime(&ftLocal, lpSystemTime); return true; } bool ConvertLocalTimeToFileTime(const SYSTEMTIME *lpSystemTime, FILETIME *lpFileTime) { if (!lpSystemTime || !lpFileTime) { return false; } FILETIME ftLocal; SystemTimeToFileTime(lpSystemTime, &ftLocal); LocalFileTimeToFileTime(&ftLocal, lpFileTime); return true; } int main() { HANDLE hFile; FILETIME ftCreate, ftAccess, ftWrite; SYSTEMTIME stCreate, stAccess, stWrite; int year, month, day; hFile = CreateFile(L"C:\\1.txt", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); if (INVALID_HANDLE_VALUE == hFile) { printf("CreateFile error: %d", GetLastError()); ExitProcess(0); } GetFileTime(hFile, &ftCreate, &ftAccess, &ftWrite); ConvertFileTimeToLocalTime(&ftCreate, &stCreate); ConvertFileTimeToLocalTime(&ftAccess, &stAccess); ConvertFileTimeToLocalTime(&ftWrite, &stWrite); printf("yyyy-MM-dd:"); scanf("%d-%d-%d", &year, &month, &day); stAccess.wYear = stWrite.wYear = year; stAccess.wMonth = stWrite.wMonth = month; stAccess.wDay = stWrite.wDay = day; ConvertLocalTimeToFileTime(&stAccess, &ftAccess); ConvertLocalTimeToFileTime(&stWrite, &ftWrite); SetFileTime(hFile, &ftCreate, &ftAccess, &ftWrite); CloseHandle(hFile); return 0; }
WINDOWS API ——GETFILETIME——獲取文件時間