Domanda

Voglio ottenere un file con questi attributi come valori interi.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top