Вызвать функцию SetFileTime
Windows API.Передайте nil
для lpLastAccessTime
и lpLastWriteTime
, если вы хотите изменить только время создания.
Вам потребуется получить дескриптор файла, вызвав CreateFile
или одиниз оболочек Delphi, так что это не самый удобный API для использования.
Облегчите себе жизнь, заключив вызов API в вспомогательную функцию, которая получает имя файла и TDateTime
.Эта функция должна управлять низкоуровневыми деталями получения и закрытия дескриптора файла и преобразования TDateTime
в FILETIME
.
Я бы сделал это так:
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;
Мне пришлось добавить объявление FILE_WRITE_ATTRIBUTES
, поскольку оно отсутствует в модуле Windows Delphi 6.