Delphi 6: Как изменить созданный файл (=дата создания файла)
Я уже несколько часов ищу в Google (и здесь).
и я не могу найти решение.
Я хочу изменить в "создано filetime и" (= filetime и создание) в DELPHI 6.
не "измененное время файла" (для которого требуется простой вызов " FileSetDate ()) и не "время последнего доступа к файлу".
Как мне это сделать?

2 ответов
вызов SetFileTime функция API Windows. Пас nil на lpLastAccessTime и lpLastWriteTime если вы хотите изменить время создания.
вам нужно будет получить дескриптор файла, позвонив CreateFile или одна из оберток Delphi, поэтому это не самый удобный API для использования.
сделайте жизнь проще для себя, обернув вызов API в вспомогательную функцию, которая получает имя файла и TDateTime. Эта функция должна управлять низкоуровневые детали получения и закрытия дескриптора файла и преобразования TDateTime до FILETIME.
Я бы сделал так:
const
FILE_WRITE_ATTRIBUTES = 00;
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 потому что он отсутствует в блоке Delphi 6 Windows.
на основе FileSetDate, вы можете написать аналогичную процедуру:
function FileSetCreatedDate(Handle: Integer; Age: Integer): Integer;
var
LocalFileTime, FileTime: TFileTime;
begin
Result := 0;
if DosDateTimeToFileTime(LongRec(Age).Hi, LongRec(Age).Lo, LocalFileTime) and
LocalFileTimeToFileTime(LocalFileTime, FileTime) and
SetFileTime(Handle, @FileTime, nil, nil) then Exit;
Result := GetLastError;
end;