2016-09-10 4 views
1

파일이 마지막으로 밀리 초로 수정되었을 때 파일의 타임 스탬프를 가져 오려고합니다. 현재 내가 사용하는 경우 :FileAge를 밀리 초로 가져올 수 있습니까?

FileAge(Filename); 

나는 마지막으로 수정 한 날짜/시간을 초 단위로받습니다. 예 : 12:00:54. 마지막으로 수정 한 날짜와 시간을 밀리 초로 가져올 수 있습니까?

+0

FileAge 사용? OS 파일 시스템이 밀리 초의 정확도를 유지한다고 생각하니? –

+2

@KenWhite 파일 시스템에 따라 다릅니다 : [NTFS = 100ns, 수퍼 유저] (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을 사용하십시오.

시스템이 원하는 정확도를 지원하면이 기능은 해당 정확도의 날짜를 제공합니다. 물론 그것은 모두 사용중인 파일 시스템에 달려 있습니다. 이 버전은 를 더 이상 사용되지 않습니다


function FileAge(const FileName: string): Integer; 

:

+0

이것들은'SysUtils.FileGetDateTimeInfo()'의 래퍼 일뿐입니다. 반환 된'SysUils.TDateTimeInfoRec' 레코드는 Windows에서 밀리 초 단위의 정밀도를 갖지만 다른 플랫폼에서는 초 단위의 정밀도를가집니다. –

0

FileAge()의 두 가지 버전이 있습니다. Windows에서

, 그것은 같은 타임 스탬프를 검색 GetFileAttributesEx() 및/또는 FindFirstFile()를 사용 FILETIME (100 나노초 정밀도를 갖는다), 그렇지만 을 갖는다 FileTimeToDosDateTime()를 사용 DOS 부호화 정수로 변환한다 정도.

POSIX에서는 stat()을 사용하며 시간 소인이 초인이 경과 한 후 반환됩니다.


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

, 그것은 사용되지 않는 버전과 동일한 타임 스탬프를 꺼냅니다하지만 FILETIMESYSTEMTIME A를 다음 밀리 초 정밀도를 사용하여 TDateTime A를을 띤다.

POSIX에서는 stat()을 사용하므로 초임입니다.

관련 문제