2011-07-31 2 views
0

GetFileAttributesExは、ファイルシステムが返す、変更されない日付を返します。 NTFSはUTCで日付を格納し、FATはそれらをローカルタイムゾーンに格納します。タイムゾーンを知らなくても、日付はかなり価値がありません。UTCで修正日を取得する方法

ファイルの最終更新日をUTCで確実に取得する最良の方法は何ですか? NTFSとFATを確認するのに最適な方法はありますか?別のファイルシステムを使用している場合はどうなりますか?私は使用できる別のAPIはありますか?誰かがここに投稿できる優雅なコードはありますか?

+0

この関数は、「変更されていない」タイムスタンプを返すかもしれませんが、FAT時刻形式からFILETIME形式に変換する必要があります。おそらく内部的に['DosDateTimeToFileTime'](http://msdn.microsoft.com/en-us/library/ms724247%28v=VS.85%29.aspx)が呼び出されていますが、その関数のドキュメントは明白ではないようです。 –

+0

大きな質問 - 私は同じ状況に陥っています。誰かがMSDNドキュメントが濁っている場所を埋めるために調査することを避けるために、それを行う機能を貼り付けたいと思っています。たとえば、http://msdn.microsoft.com/en-us/library/ms724926(VS.85).aspxに例がありますが、ファイル時間は常にUTCで返されると仮定しています... – tenfour

答えて

3

Win32 API GetFileTimeを使用すると、すべての時刻がUTCで返されます。はい、FATファイルシステムはこれらの値を現地時間で保存しますが、Win32 APIはUTC変換を行っています。 'FileTimes' MSDNのドキュメントから

引用:

GetFileTimeは、FATファイルシステムからキャッシュされたUTC時刻を取得します。

2

http://msdn.microsoft.com/en-us/library/ms724290%28v=vs.85%29.aspx

からFATファイルシステムは、ローカルタイムにディスク上の回を記録。 GetFileTimeは、キャッシュされたUTC時間をFATファイルシステムから取得します。夏時間になると、キャッシュが更新されないため、GetFileTimeで取得された時間は1時間になりません。コンピュータを再起動すると、GetFileTimeが取得するキャッシュされた時刻は正しいです。 FindFirstFileは、FATファイルシステムからローカルタイムを取得し、タイムゾーンと夏時間の現在の設定を使用してUTCに変換します。したがって、夏時間の場合、変換するファイルの時間が標準時間であっても、FindFirstFileは夏時間を考慮に入れます。

関連する問題