ファイルタイムを変更する


ファイルタイムを変更するには SetFileTime 関数を使用します。
ディレクトリのタイム変更はNT系OSのみです。


Sample code

引数に GetLocalTime 関数で取得した値を渡すとファイルタイムを現在の日付と時刻に変更します。


//lpszPath : ファイル名またはディレクトリ名
//st       : 変更したい日時
BOOL MySetFileTime(LPCTSTR lpszPath, SYSTEMTIME st)
{
    FILETIME ftl, ft;
    BOOL bResult = FALSE;
    
    if(SystemTimeToFileTime(&st, &ftl)) {
        if(LocalFileTimeToFileTime(&ftl, &ft)) {
            DWORD attr = GetFileAttributes(lpszPath);
            if(attr != 0xffffffff) {
                HANDLE hFile = NULL;
                if((attr & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) {
                    //ディレクトリの場合
                    hFile = CreateFile(lpszPath, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS, NULL);
                }
                else {
                    //ファイルの場合
                    hFile = CreateFile(lpszPath, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
                }
                if(hFile != INVALID_HANDLE_VALUE) {
                    bResult = SetFileTime(hFile, &ft, &ft, &ft);
                    CloseHandle(hFile);
                }
            }
        }
    }
    return bResult;
}

一覧メニューへ