Mega Code Archive

 
Categories / Delphi / Files
 

Get Directory Creation, Modified, Last Accessed and Last Write Date and Time using Delphi

Title: Get Directory Creation, Modified, Last Accessed and Last Write Date and Time using Delphi While Delphi provides many (file and) directory related functions and procedures to help you operate on folders and file, quite a few tasks equire you to dive into the world of Windows API calls. Date Time Info for a Directory If your task is to track the "modified" date time value for a given directory, you simply need to take a look at the TSearchRec record returned by a call to the FindFirst function. If you, on the other hand, need to get the creation time, for example, you need to dig deeply... Here's an example function that will display all the important time values for a given directory: creation time, date and time the specified directory was last accessed and date and time the specified file or directory was last written to. uses DateUtils; procedure DirectoryDateTimeInfo(const path : string) ; var sr : TSearchRec; modifiedTime : TDateTime; creationTimeSystem: TSystemTime; lastAccessTimeSystem: TSystemTime; lastWriteTimeSystem: TSystemTime; creationTime: TDateTime; lastAccessTime: TDateTime; lastWriteTime: TDateTime; begin if sysUtils.FindFirst(path, faDirectory, sr) = 0 then try modifiedTime := FileDateToDateTime(sr.Time) ; FileTimeToSystemTime(sr.FindData.ftCreationTime, creationTimeSystem) ; with creationTimeSystem do creationTime := EncodeDateTime(wYear, wMonth, wDay, wHour, wMinute, wSecond, wMilliseconds) ; FileTimeToSystemTime(sr.FindData.ftLastAccessTime, lastAccessTimeSystem) ; with lastAccessTimeSystem do lastAccessTime := EncodeDateTime(wYear, wMonth, wDay, wHour, wMinute, wSecond, wMilliseconds) ; FileTimeToSystemTime(sr.FindData.ftLastWriteTime, lastWriteTimeSystem) ; with lastWriteTimeSystem do lastWriteTime := EncodeDateTime(wYear, wMonth, wDay, wHour, wMinute, wSecond, wMilliseconds) ; ShowMessage(Format('Date Time Info for "%s"', [path])) ; ShowMessage(Format('Creation Time: "%s"', [DateTimeToStr(creationTime)])) ; ShowMessage(Format('Last Access Time: "%s"', [DateTimeToStr(lastAccessTime)])) ; ShowMessage(Format('Last Write Time: "%s"', [DateTimeToStr(lastWriteTime)])) ; ShowMessage(Format('Last Modified Time: "%s"', [DateTimeToStr(modifiedTime)])) ; finally FindClose(sr) ; end else ShowMessage(Format('Could not obtain info for "%s"', [path])) ; end; A quick info on the RTL + API functions used: Find First / Find Close is used to fill in the TSearchRec ("sr" variable) record containing info on the file specified. Last Modified time is stored in the "Time" field. Delphi's FileDateToDateTime converts the system time stamp of a file to a TDateTime value. FileTimeToSystemTime API converts a 64-bit file time to system time format (TSystemTime) Delphi's EncodeDateTime returns a TDateTime represented by a specified year, month, day, hour, minute, second, and millisecond. Finally, DateTimeToStr is used to convert the date and time value to a string. Note: The DirectoryDateTimeInfo procedure will happily accept files!