Win32API ファイルタイムを設定する SetFileTime
ファイルタイムを設定するには、SetFileTime関数を用いる。
- SetFileTimeのプロトタイプ
BOOL SetFileTime( HANDLE hFile, // ファイルのハンドル CONST FILETIME *lpCreationTime, // 作成日時 CONST FILETIME *lpLastAccessTime, // 最終アクセス日時 CONST FILETIME *lpLastWriteTime // 最終更新日時 );
- lpCreationTime, lpLastAccessTime, lpLastWriteTime は、設定する必要がなければ NULL を指定すればよい。
- 使用例
#include <windows.h> int main() { HANDLE hFile; FILETIME creationTime, lastAccessTime, lastWriteTime; SYSTEMTIME localTime; //ファイルタイムを変更するためには、GENERIC_WRITE が必要 hFile = CreateFile("test.txt", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { return 1; } /////////////////////////////////////////////////// //ファイルタイムを現在のローカルタイムに変更する GetLocalTime(&localTime); SystemTimeToFileTime(&localTime, &creationTime); SystemTimeToFileTime(&localTime, &lastAccessTime); SystemTimeToFileTime(&localTime, &lastWriteTime); if (!SetFileTime(hFile, &creationTime, &lastAccessTime, &lastWriteTime)) { return 1; } /////////////////////////////////////////////////// //ファイルタイムが変更されているか確かめる memset(&creationTime, 0, sizeof(creationTime)); memset(&lastAccessTime, 0, sizeof(lastAccessTime)); memset(&lastWriteTime, 0, sizeof(lastWriteTime)); if (!GetFileTime(hFile, &creationTime, &lastAccessTime, &lastWriteTime)) { return 1; } SYSTEMTIME st; FileTimeToSystemTime(&creationTime, &st); printf("CreationTime: %04d/%02d/%02d %02d:%02d:%02d\n", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond); FileTimeToSystemTime(&lastAccessTime, &st); printf("LastAccessTime: %04d/%02d/%02d %02d:%02d:%02d\n", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond); FileTimeToSystemTime(&lastWriteTime, &st); printf("LastWriteTime: %04d/%02d/%02d %02d:%02d:%02d\n", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond); CloseHandle(hFile); return 0; }