2008-09-27 6 views

답변

12

Delphians는 FindFirst 방식 (SearchRec 구조 중 일부가 있음)을 좋아하지만 GetFileAttributesEx라는 Win32 API 함수를 제안합니다.

13

은 SysUtils를에서

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

시도 사용할 수있는 GetFileLastWrite 기능이 있습니다. 이 일을해야

function DSiFileTimeToDateTime(fileTime: TFileTime; var dateTime: TDateTime): boolean; 
var 
    sysTime: TSystemTime; 
begin 
    Result := FileTimeToSystemTime(fileTime, sysTime); 
    if Result then 
    dateTime := SystemTimeToDateTime(sysTime); 
end; { DSiFileTimeToDateTime } 

function DSiGetFileTimes(const fileName: string; var creationTime, lastAccessTime, 
    lastModificationTime: TDateTime): boolean; 
var 
    fileHandle   : cardinal; 
    fsCreationTime  : TFileTime; 
    fsLastAccessTime  : TFileTime; 
    fsLastModificationTime: TFileTime; 
begin 
    Result := false; 
    fileHandle := CreateFile(PChar(fileName), GENERIC_READ, FILE_SHARE_READ, nil, 
    OPEN_EXISTING, 0, 0); 
    if fileHandle <> INVALID_HANDLE_VALUE then try 
    Result := 
     GetFileTime(fileHandle, @fsCreationTime, @fsLastAccessTime, 
     @fsLastModificationTime) and 
     DSiFileTimeToDateTime(fsCreationTime, creationTime) and 
     DSiFileTimeToDateTime(fsLastAccessTime, lastAccessTime) and 
     DSiFileTimeToDateTime(fsLastModificationTime, lastModificationTime); 
    finally 
    CloseHandle(fileHandle); 
    end; 
end; { DSiGetFileTimes } 
+0

이 주석 시점은 추천되지 않습니다. –

+0

'FileAge()'는 파일의 CREATE 날짜를 가져오고, LAST MODIFED 날짜는 가져 오지 않습니다. –

+0

@JerryGagnon - 아니요, '_WIN32_FILE_ATTRIBUTE_DATA.ftLastWriteTime'을 사용합니다 –

6
DSiWin32 프리웨어 라이브러리에서

.

function GetFileModDate(filename : string) : integer; 
var 
    F : TSearchRec; 
begin 
    FindFirst(filename,faAnyFile,F); 
    Result := F.Time; 
    //if you wanted a TDateTime, change the return type and use this line: 
    //Result := FileDateToDatetime(F.Time); 
    FindClose(F); 
end; 
+3

왜 out 매개 변수가 아닌 var - 당신은 들어오는 값을 사용하지 않는 것 같습니까? – Kohi

+1

유효한 포인트. 저는 '오래된 학교'프로그래머입니다. 'out'이 발명되기 전에 그것을 배웠고 모든 경우에 'var'를 자동으로 사용합니다. – gabr

3
function GetFileModDate(filename : string) : TDateTime; 
var 
    F : TSearchRec; 
begin 
    FindFirst(filename,faAnyFile,F); 
    Result := F.TimeStamp; 
    //if you really wanted an Int, change the return type and use this line: 
    //Result := F.Time; 
    FindClose(F); 
end; 

F.Time은 이후 도움말 파일, 사용되지 않는 한 사용 F.TimeStamp는 말한다.
최신 버전의 Delphi로 인해 업데이트하는 것

0

System.IOUtils에는 파일 보관 기간을 가져 오는 몇 가지 기능이있는 TFile 레코드가 있습니다. GetCreationTime, GetLastAccessTime, GetLastWriteTime

관련 문제