2016-09-10 7 views
1

ファイルのタイムスタンプを最後にミリ秒に変更したときに取得しようとしています。現在私が使用している場合:FileAgeをミリ秒にすることは可能ですか?

FileAge(Filename); 

私は最後に変更された日時を1秒間取得します。たとえば、12:00:54です。最終更新日時をミリ秒単位で取得できますか?

+0

FileAgeを使用していますか?いいえ。しかし、OSのファイルシステムが何ミリ秒の精度でそれを保持していると思いますか? –

+2

@KenWhiteファイルシステムによっては、[NTFS = 100ns、SuperUserと言う](http://superuser.com/questions/937380/get-creation-time-of-file-in-milliseconds)。この値は、[GetFileTime](https://msdn.microsoft.com/en-us/library/windows/desktop/ms724320(v = vs.85).aspx)APIを使用して取得できます。 – GolezTrol

+0

@GolezTrol:はい、私は認識しています。しかし、このポスターはOSやFSが使用されていることを示していませんでした。 –

答えて

4

System.IOUtilsユニットのTFile.GetLastWriteTimeまたはTFile.GetLastWriteTimeUtcを使用してください。

システムが希望する精度をサポートしている場合、これらの機能はその正確さの日付を提供します。もちろん、それはすべて使用中のファイルシステムに依存します。

+0

これらは単に 'SysUtils.FileGetDateTimeInfo()'のラッパーであることに注意してください。返される 'SysUils.TDateTimeInfoRec'レコードの精度は、Windowsではミリ秒ですが、他のプラットフォームでは秒精度です。 –

0

FileAge()の2つのバージョンがあります。


function FileAge(const FileName: string): Integer; 

このバージョンはを推奨されていません。 Windowsの

、それは(100ナノ秒精度を有する)FILETIMEとしてタイムスタンプを取得するGetFileAttributesEx()及び/又はFindFirstFile()を使用するが、その後秒を有するFileTimeToDosDateTime()を用いたDOSエンコード整数、それを隠れ家精度。

POSIXでは、stat()を使用し、タイムスタンプを秒、からエポックを経過した時刻として返します。 Windowsでは


function FileAge(const FileName: string; out FileDateTime: TDateTime; FollowLink: Boolean = True): Boolean; 

、それは推奨されないバージョンと同じタイムスタンプをretreivesが、ミリ秒精度を使用してTDateTimeに、その後SYSTEMTIMEFILETIMEを隠れ家と。

POSIXでは、stat()を使用するため、の精度を持ちます。

関連する問題