¿Cómo obtener las fechas de creación / última modificación de un archivo en Delphi?

StackOverflow https://stackoverflow.com/questions/144453

  •  02-07-2019
  •  | 
  •  

Pregunta

Quiero obtener un archivo de estos atributos como valores enteros.

¿Fue útil?

Solución

A los delphians les gusta el enfoque FindFirst (la estructura SearchRec tiene algunos de ellos), pero sugeriría la función de la API Win32 GetFileAttributesEx.

Otros consejos

Probar

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

Desde SysUtils.

De la DSiWin32 biblioteca de programas gratuitos:

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 }

Esto debería funcionar, y es el código de 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 ya ha sido desaprobado, el archivo de Ayuda dice Usar F.TimeStamp.
Solo para actualizar esto debido a versiones posteriores de Delphi

Puede llamar a la GetFileInformationByHandle función winapi. Aparently JCL tiene una función GetFileLastWrite que también podría usar

System.IOUtils tiene un registro TFile con varias funciones para obtener la antigüedad del archivo, por ejemplo. GetCreationTime, GetLastAccessTime, GetLastWriteTime

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top