Mega Code Archive

 
Categories / Delphi / Files
 

How to get File Created,Modified and Accessed dates

Title: How to get File Created,Modified and Accessed dates. Question: This function will return Created,Modified and Accessed datetimes of a given file. The datetimes are returned as TDateTime variables passed by REFERENCE. The function returns true if the file was found, else false. The dates are the same as displayed by EXPLORER when file properties is selected. See my NEW article #4182 "Playing with File Dates (Data Hiding)" for new functionality of Getting ONE of the file dates only and SetFileTimes which can SET ALL or ONE of the File Datetimes as well. Answer: uses Windows,ShellAPI; // ================================================================ // Return the three dates (Created,Modified,Accessed) // of a given filename. Returns FALSE if file cannot // be found or permissions denied. Results are returned // in TdateTime VAR parameters // ================================================================ function GetFileTimes(FileName : string; var Created : TDateTime; var Modified : TDateTime; var Accessed : TDateTime) : boolean; var FileHandle : integer; Retvar : boolean; FTimeC,FTimeA,FTimeM : TFileTime; LTime : TFileTime; STime : TSystemTime; begin FileHandle := FileOpen(FileName,fmShareDenyNone); Created := 0.0; Modified := 0.0; Accessed := 0.0; if FileHandle RetVar := false else begin RetVar := true; GetFileTime(FileHandle,@FTimeC,@FTimeA,@FTimeM); FileClose(FileHandle); // Created FileTimeToLocalFileTime(FTimeC,LTime); if FileTimeToSystemTime(LTime,STime) then begin Created := EncodeDate(STime.wYear,STime.wMonth,STime.wDay); Created := Created + EncodeTime(STime.wHour,STime.wMinute,STime.wSecond,STime.wMilliSeconds); end; // Accessed FileTimeToLocalFileTime(FTimeA,LTime); if FileTimeToSystemTime(LTime,STime) then begin Accessed := EncodeDate(STime.wYear,STime.wMonth,STime.wDay); Accessed := Accessed + EncodeTime(STime.wHour,STime.wMinute,STime.wSecond,STime.wMilliSeconds); end; // Modified FileTimeToLocalFileTime(FTimeM,LTime); if FileTimeToSystemTime(LTime,STime) then begin Modified := EncodeDate(STime.wYear,STime.wMonth,STime.wDay); Modified := Modified + EncodeTime(STime.wHour,STime.wMinute,STime.wSecond,STime.wMilliSeconds); end; end; Result := RetVar; end; procedure Test; var CDate,MDate,ADate : TDateTime; begin if GetFileTimes('c:\autoexec.bat',CDate,MDate,ADate) then begin Label1.Caption := FormatDateTime('dd/mm/yyyy hh:nn',CDate); Label2.Caption := FormatDateTime('dd/mm/yyyy hh:nn',MDate); Label3.Caption := FormatDateTime('dd/mm/yyyy hh:nn',ADate); end; end;