windows - library - ¿Cómo obtener las fechas de creación/última modificación de un archivo en Delphi?
delphi shellexecute unit (7)
Los delfines tienden a preferir el enfoque FindFirst (la estructura SearchRec tiene algunos de ellos), pero sugeriría la función WinForm API GetFileAttributesEx.
Quiero obtener un archivo de estos atributos como valores enteros.
Puede llamar a la función GetFileInformationByHandle winapi. Aparently JCL tiene una función GetFileLastWrite que también puede usar
Tratar
function FileAge(const FileName: string; out FileDateTime: TDateTime): Boolean;
De SysUtils.
De la biblioteca gratuita DSiWin32 :
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 }
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 ha sido desaprobado desde entonces, el archivo de Ayuda dice Use F.TimeStamp.
Solo para actualizar esto debido a las versiones posteriores de Delphi
System.IOUtils tiene un registro TFile con varias funciones para obtener la antigüedad del archivo, por ejemplo, GetCreationTime, GetLastAccessTime, GetLastWriteTime
Esto debería funcionar, y es código 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;