Win32API ファイルタイムを取得する GetFileTime, FileTimeToLocalFileTime, FileTimeToSystemTime

Win32APIでファイルタイムを取得する


使用するAPI

  • GetFileTime

  • FileTimeToLocalFileTime

  • FileTimeToSystemTime

  • CreateFile

  • CloseHandle


  • ファイルタイムを取得するサンプルプログラムの手順
    1.ファイルタイムを取得
    2.これをローカルファイルタイムに変換
    3.さらにSYSTEMTIME構造体に変換しコンソールに表示する

    #include <windows.h>
    
    void PrintFileTimeByLocalTime(const FILETIME *lpFileTime)
    {
    	FILETIME localFileTime;
    	SYSTEMTIME systemTime;
    	static char *dayOfWeek[] = 
    		{"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
    
    	FileTimeToLocalFileTime(lpFileTime, &localFileTime);
    	FileTimeToSystemTime(&localFileTime, &systemTime);
    
    	printf("%04d/%02d/%02d %02d:%02d:%02d.%03d (%s)\n",
    		systemTime.wYear,
    		systemTime.wMonth,
    		systemTime.wDay,
    		systemTime.wHour,
    		systemTime.wMinute,
    		systemTime.wSecond,
    		systemTime.wMilliseconds,
    		dayOfWeek[systemTime.wDayOfWeek]);
    }
    
    
    int main()
    {
    	HANDLE hFile;
    	char *lpFileName = "test.txt";
    	FILETIME creationTime;
    	FILETIME lastAccessTime;
    	FILETIME lastWriteTime;
    
    	hFile = CreateFile(lpFileName,
    		GENERIC_READ,
    		FILE_SHARE_READ,
    		NULL,
    		OPEN_EXISTING,
    		FILE_ATTRIBUTE_NORMAL,
    		NULL);
    
    	if (hFile == INVALID_HANDLE_VALUE) {
    		printf("CreateFile failed\n");
    		return 1;
    	}
    
    	if (!GetFileTime(hFile, &creationTime, &lastAccessTime, &lastWriteTime)) {
    		printf("GetFileTime failed\n");
    		CloseHandle(hFile);
    		return 1;
    	}
    
    	/作成時刻
    	PrintFileTimeByLocalTime(&creationTime);
    
    	//最終アクセス時刻
    	PrintFileTimeByLocalTime(&lastAccessTime);
    
    	//最終書き込み時刻
    	PrintFileTimeByLocalTime(&lastWriteTime);
    
    	CloseHandle(hFile);
    
    	return 0;
    }