Wie man dorthin schaffen / letzten geänderten Daten einer Datei in Delphi?
Frage
Ich möchte ein Dateien diese Attribute als ganzzahlige Werte erhalten.
Lösung
Delphians neigen dazu, den Ansatz zu Findfirst zu mögen (die SearchRec Struktur einige von denen hat), aber ich würde die Win32-API-Funktion GetFileAttributesEx vorschlagen.
Andere Tipps
Versuchen
function FileAge(const FileName: string; out FileDateTime: TDateTime): Boolean;
Von SysUtils.
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 }
Das sollte funktionieren, und es ist nativen Delphi-Code.
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 ist seit veraltet, Hilfe-Datei sagt Verwenden F.TimeStamp.
Nur zu aktualisieren diese durch spätere Versionen von Delphi
könnten Sie rufen die GetFileInformationByHandle winapi Funktion. Aparently JCL hat eine GetFileLastWrite Funktion können Sie auch
verwenden könnteSystem.IOUtils tun, um eine TFile Rekord für immer Dateialter mit mehreren Funktionen, z GetCreationTime, GetLastAccessTime, GetLastWriteTime