2008-09-27 9 views

Antwort

12

Delphi neigen dazu, den FindFirst-Ansatz zu mögen (die SearchRec-Struktur hat einige davon), aber ich würde die Win32-API-Funktion GetFileAttributesEx vorschlagen.

13

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

Von SysUtils Versuchen Sie nutzen könnten.

+0

Veraltet zum Zeitpunkt dieses Kommentars. –

+0

'FileAge()' ruft das CREATE-Datum der Datei ab, nicht das LAST MODIFIED-Datum. –

+0

@JerryGagnon - Nein, es verwendet '_WIN32_FILE_ATTRIBUTE_DATA.ftLastWriteTime' –

6

Von der DSiWin32 Freeware-Bibliothek:

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 } 
+3

Warum Var statt Out-Parameter - Sie scheinen nicht den Wert zu verwenden, der kommt? – Kohi

+1

Gültiger Punkt. Ich bin ein 'Old School' Programmierer, ich habe es gelernt, bevor 'out' erfunden wurde und ich benutze automatisch 'var' bei allen Gelegenheiten. – gabr

4

Dies sollte funktionieren, und es ist nativen Code Delphi.

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
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 seit Veraltete, Datei-Hilfe sagt Verwenden F.TimeStamp.
Nur um dies zu aktualisieren aufgrund der späteren Versionen von Delphi

0

System.IOUtils haben einen TFile-Datensatz mit mehreren Funktionen für das Abrufen des Dateialters, z. GetCreationTime, GetLastAccessTime, GetLastWriteTime