2008-09-27 26 views

cevap

12

Delphians, FindFirst yaklaşımını (SearchRec yapısının bunlardan bazılarını) beğenme eğilimindedir, ancak GetFileAttributesEx Win32 API işlevini öneririm.

13

SysUtils itibaren

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

deneyin kullanabileceği bir GetFileLastWrite işlevine sahiptir. Bu çalışması gerekir

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

Bu yorumun süresi itibariyle kullanımdan kaldırıldı. –

+0

'FileAge()', dosyanın CREATE tarihini, LAST MODIFIED tarihini değil alır. –

+0

@JerryGagnon - Hayır, '_WIN32_FILE_ATTRIBUTE_DATA.ftLastWriteTime' –

6
DSiWin32 ücretsiz Kütüphaneden

.

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

neden dışarı parametresinden farklıdır - gelen değeri kullanmıyor musunuz? – Kohi

+1

Geçerli nokta. Ben bir 'eski okul' programcısıyım, 'dışarıdan' icat edilmeden önce öğrendim ve tüm durumlarda otomatik olarak 'var' kullanıyorum. – 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 beri dosyayı Yardım Kaldırıldı, olmuştur Kullanım F.TimeStamp diyor.
Yalnızca, daha sonraki sürümleri için, şu şekilde güncelleştirin: Delphi

0

System.IOUtils, dosya çağını almak için çeşitli işlevlere sahip bir TFile kaydına sahiptir, örn. GetCreationTime, GetLastAccessTime, GetLastWriteTime

İlgili konular