Wywołanie funkcji API SetFileTime
systemu Windows. Przekaż nil
dla lpLastAccessTime
i lpLastWriteTime
, jeśli chcesz zmodyfikować czas utworzenia.
Konieczne będzie uzyskanie uchwytu pliku przez wywołanie CreateFile
lub jednego z wrapperów Delphi, więc nie jest to najwygodniejszy interfejs API do użycia.
Ułatw sobie życie, zawijając wywołanie API w funkcji pomocnika, która odbiera nazwę pliku i TDateTime
. Ta funkcja powinna zarządzać niskopoziomowymi szczegółami uzyskiwania i zamykania uchwytu pliku oraz przekształcania TDateTime
w FILETIME
.
zrobiłbym to tak:
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;
musiałem dodać deklarację FILE_WRITE_ATTRIBUTES
ponieważ nie jest obecny w jednostce Delphi 6 Windows.
Dziękuję bardzo! – user1089764