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;