ファイルの更新日付を書き換えたい

ごく稀に、ファイルの更新日付を修正したい場合があります。
(そんなことはそう多くはないですが…)
過去にサブルーチン化したものがあるので、折角なのでここで紹介しておきます。

bool __fastcall subSetFileTimeStamp(AnsiString strPATH,AnsiString strDATE)
{
    //  指定したファイルの更新日付を変更する
    bool bRET = false;      //  戻り値
    TDateTime dtVAL;        //  変更値
    TFileStream *fsDAT;
    int intDATE;
    bool bRONLY;
    DWORD dwFA;

    if (FileExists(strPATH))    {
        //  ファイルがある場合のみ実行する
        try {
            //  ファイルを(強制的に書き込みモードで)開く
            dwFA = ::GetFileAttributes(strPATH.c_str());
            if ((dwFA & FILE_ATTRIBUTE_READONLY) != 0)  {
                //  読取専用
                bRONLY = true;
                ::SetFileAttributes(strPATH.c_str(), dwFA >> FILE_ATTRIBUTE_READONLY);
            } else {
                bRONLY = false;
            }
            fsDAT = new TFileStream(strPATH,fmOpenWrite);

            //  文字列を数値に変換
            dtVAL = StrToDateTime(strDATE);
            intDATE = DateTimeToFileDate(dtVAL);

            FileSetDate(fsDAT->Handle,intDATE);

            //  読取専用だったものはそのようにする
            if (bRONLY) {
                ::SetFileAttributes(strPATH.c_str(), dwFA << FILE_ATTRIBUTE_READONLY);
            }

            bRET = true;
            delete fsDAT;
        }
        catch(...)  {
            delete fsDAT;
            bRET = false;
        }
    }

    return bRET;
}


なお、この関数はBDS2006での動作確認はしておりません。
作った当時はC++Builder4だったように思います。


トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-12-09 (日) 22:30:50