Come ottenere le date di creazione / ultima modifica di un file in Delphi?
Domanda
Voglio ottenere un file con questi attributi come valori interi.
Soluzione
I delfini tendono ad apprezzare l'approccio FindFirst (la struttura SearchRec ne ha alcuni), ma suggerirei la funzione API Win32 GetFileAttributesEx.
Altri suggerimenti
Prova
function FileAge(const FileName: string; out FileDateTime: TDateTime): Boolean;
Da SysUtils.
Dalla DSiWin32 libreria gratuita:
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 }
Dovrebbe funzionare ed è il codice Delphi nativo.
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;
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 è da allora obsoleto, il file della Guida dice Usa F.TimeStamp.
Solo per aggiornarlo a causa delle versioni successive di Delphi
Puoi chiamare la GetFileInformationByHandle winapi. Allo stesso modo JCL ha una funzione GetFileLastWrite che puoi usare anche
System.IOUtils ha un record TFile con diverse funzioni per ottenere l'età dei file, ad es. GetCreationTime, GetLastAccessTime, GetLastWriteTime