ファイルのタイムスタンプを設定する


ファイルのタイムスタンプを設定するには、SetFileTime関数を使います。対象がディレクトリの場合は、CreateFile関数でファイルハンドルを取得する際、引数のセキュリティ属性にFILE_FLAG_BACKUP_SEMANTICSを加える必要があります。例えば、次のようにします。

//---------------------------------------------------------------------------
bool __fastcall SetFileTimes(AnsiString AFilePath, const FILETIME* ACreationTime, const FILETIME* ALastWriteTime, const FILETIME* ALastAccessTime)
{
        HANDLE fileHandle = CreateFile(
                AFilePath.c_str(),
                GENERIC_WRITE,
                0,
                NULL,
                OPEN_EXISTING,
                FILE_ATTRIBUTE_NORMAL | (DirectoryExists(AFilePath) ? | FILE_FLAG_BACKUP_SEMANTICS : 0),
                NULL);
        if(fileHandle == INVALID_HANDLE_VALUE) {
                return false;
        }
        try {
                if(!SetFileTime(fileHandle, ACreationTime, ALastAccessTime, ALastWriteTime)) {
                        return false;
                }
        }
        __finally {
                CloseHandle(fileHandle);
        }
        return true;
}
//---------------------------------------------------------------------------
FATファイルシステムでは、ディレクトリのタイムスタンプを変更することはできません。
最終更新: 2008-07-05

戻る