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