Call the SetFileTime function of the Windows API. Pass nil for lpLastAccessTime and lpLastWriteTime if you want to change the creation time.
You will need to get the file descriptor by calling CreateFile or one of the Delphi shells, so this is not the most convenient API to use.
Make life easier for yourself by wrapping the API call in a helper function that gets the file name and TDateTime . This function should manage low-level information about getting and closing a file descriptor and convert TDateTime to FILETIME .
I would do it like this:
const FILE_WRITE_ATTRIBUTES = $0100; procedure SetFileCreationTime(const FileName: string; const DateTime: TDateTime); var Handle: THandle; SystemTime: TSystemTime; FileTime: TFileTime; begin Handle := CreateFile(PChar(FileName), FILE_WRITE_ATTRIBUTES, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if Handle=INVALID_HANDLE_VALUE then RaiseLastOSError; try DateTimeToSystemTime(DateTime, SystemTime); if not SystemTimeToFileTime(SystemTime, FileTime) then RaiseLastOSError; if not SetFileTime(Handle, @FileTime, nil, nil) then RaiseLastOSError; finally CloseHandle(Handle); end; end;
I had to add the FILE_WRITE_ATTRIBUTES declaration because it is not in the Windows Delphi 6 block.
David heffernan
source share