- ベストアンサー
CreateFile関数を用いたファイル作成について
- CreateFile関数を使用してファイルを作成する際に、リネーム処理後の作成日時が以前の作成日時になる問題が発生しています。
- この問題の原因は、CreateFile関数がキャッシュファイルの情報を取得しているためです。
- 解決方法としては、キャッシュファイルの情報をクリア(削除)することで、正しい作成日時でファイルを作成することができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
新しく作成したファイルに、SetFileTime APIで現在の日時を設定してはどうですか? GetSystemTime APIでシステム時間を取得して、SystemTimeToFileTime APIでファイル時刻へ変換しSetFileTime APIでファイルの時刻を変更すれば更新できそうですが、試していないので結果はわかりません。 http://msdn.microsoft.com/library/ja/jpsysinf/html/_win32_getsystemtime.asp http://msdn.microsoft.com/library/ja/jpsysinf/html/_win32_systemtimetofiletime.asp http://msdn.microsoft.com/library/ja/jpsysinf/html/_win32_setfiletime.asp
その他の回答 (2)
- yosi_yosi
- ベストアンサー率35% (165/468)
いったん該当ファイルを削除して、それからもう一度作成したらよいと思いますよ。 DeleteFile()とか...
お礼
MoveFile関数を、CopyFile&DeleteFile関数に変更しましたが、結果は同じでした。 (対処方法を勘違いしていましたらすみません) やはりキャッシュが悪さをしてるのでしょうかねぇ。
- valvelde
- ベストアンサー率35% (46/129)
新規にaaa.txtを作成せずに別の名前でファイルを作成した後、aaa.txtにリネームする。
お礼
(引数は省略) (1)CopyFile(aaa.txt, aaa_0408.txt) ↓ (2)CreateFile(tmp.txt) ↓ (3)MoveFile(tmp.txt, aaa.txt) とすると、(3)にて作成日時が元に戻ってしまいました・・・ どうやらこちらの方法ではうまくいかないようです。
お礼
ご指摘の通り、下記APIにて作成日時を更新することができました。 SystemTimeToFileTime→ LocalFileTimeToFileTime→ SetFileTime 言われてみれば「なるほど~」という対処方法で なかなか気づきませんでした(汗) どうもありがとうございましたm(_ _)m