Comment obtenir les dates de création / dernière modification d'un fichier dans Delphi?

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

  •  02-07-2019
  •  | 
  •  

Question

Je souhaite obtenir un fichier contenant ces attributs sous forme de valeurs entières.

Était-ce utile?

La solution

Les Delphiens ont tendance à aimer l'approche FindFirst (la structure SearchRec en contient), mais je suggérerais la fonction GetFileAttributesEx de l'API Win32.

Autres conseils

Essayez

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

À partir de SysUtils.

De la bibliothèque de logiciels gratuits 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 }

Cela devrait fonctionner. Il s'agit d'un code Delphi natif.

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 a depuis été déconseillé, selon le fichier d'aide Use UseTimeStamp.
Juste pour mettre à jour ceci en raison de versions ultérieures de Delphi

Vous pouvez appeler la fonction winapi GetFileInformationByHandle . JCL possède une fonction GetFileLastWrite que vous pouvez également utiliser

.

System.IOUtils possède un enregistrement TFile avec plusieurs fonctions permettant d’obtenir l’âge du fichier, par exemple. GetCreationTime, GetLastAccessTime, GetLastWriteTime

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top