ファイルの時刻情報を設定する【Windows API】

ファイルの時刻を設定することができるAPIも存在します。SetFileTime関数を使用するとファイル作成日時を簡単に設定することができます。ここでは システム時刻からファイル時刻への変換など必要な前処理についても取り扱います。

int main(int argc, char* argv[])
{
    HANDLE hFile;
    char szFileName[MAX_PATH+1];

    FILETIME CreationTime;        // 作成日時
    FILETIME LocalCreationTime;    // 作成日時(ローカル)

    SYSTEMTIME stCreationTime;    // 作成日時

    lstrcpy(szFileName, "D:\\TEST.TXT");
    ZeroMemory(&stCreationTime, sizeof(SYSTEMTIME));

    // 2010/10/30 10:00:00 に設定する
    stCreationTime.wYear = 2010;
    stCreationTime.wMonth = 10;
    stCreationTime.wDay = 30;
    stCreationTime.wHour = 10;
    stCreationTime.wMinute = 0;
    stCreationTime.wSecond = 0;

    // システム時刻からファイル時刻に変換する
    SystemTimeToFileTime(&stCreationTime, &LocalCreationTime);

    // 日本標準時(JST)から世界協定時(UTC)に変換する
    LocalFileTimeToFileTime(&LocalCreationTime, &CreationTime);

    // ファイルを開く
    hFile = CreateFile(    szFileName, GENERIC_WRITE, 0, NULL, 
                        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

    if (hFile != INVALID_HANDLE_VALUE) {

        SetFileTime(hFile, &CreationTime, NULL, NULL);

    }

    CloseHandle(hFile);
    return 0;
}

 

Windows API

Posted by @erestage