ファイルの作成日時を取得する【Windows API】

GetFileTime関数を使用するとファイル作成日時を簡単に取得することができます。ここでは ファイル時刻からシステム時刻への変換など必要な後処理についても取り扱います。 本関数の使い道としてはバックアップソフトなどで変更されているかどうかを判定するときに 使用することができます。

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

    FILETIME CreationTime;        // 作成日時
    FILETIME LastAccessTime;    // 最終アクセス日時
    FILETIME LastWriteTime;        // 最終書き込み日時

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

    SYSTEMTIME stCreationTime;    // 作成日時

    lstrcpy(fname, "D:\\TEST.TXT");

    hFile = CreateFile(    fname, GENERIC_READ, 0, NULL, 
                        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

    if (hFile != INVALID_HANDLE_VALUE) {

        // ファイル時刻を取得してハンドルを閉じる
        GetFileTime(hFile, &CreationTime, &LastAccessTime, &LastWriteTime);
        CloseHandle(hFile);

        // UTC(世界協定時)で取得されるので日本標準時に変換します
        FileTimeToLocalFileTime(&CreationTime, &LocalCreationTime);

        // FILETIME型からSYSTEMTIME型に変換する
        // FILETIME型は1601年1月1日以降の100ナノ秒間隔の数を表す64ビット値で扱い辛いので
        // SYSTEMTIME型に変換してから表示します。
        if (FileTimeToSystemTime(&LocalCreationTime, &stCreationTime)) {
            printf("Creation Time : %04d-%02d-%02d %02d:%02d:%02d\n", 
                stCreationTime.wYear, stCreationTime.wMonth, stCreationTime.wDay,
                stCreationTime.wHour, stCreationTime.wMinute, stCreationTime.wSecond);
        }

    }

    return 0;
}

 

Windows API

Posted by @erestage