我已经在谷歌和这里搜索了几个小时,但是我找不到解决办法。
我想要在DELPHI 6中更改“创建时间”(即创建文件的时间戳),而不是“修改时间”(只需要使用“FileSetDate()”调用)或“上次访问时间”。
我应该如何操作?
SetFileTime
。如果您只想修改创建时间,请将lpLastAccessTime
和lpLastWriteTime
参数设置为nil
。CreateFile
或其中一个Delphi包装器来获取文件句柄,因此这不是最方便的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
的声明,因为它在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;
DateTimeToSystemTime(DateTime, SystemTime)
更改为DateTimeToSystemTime(DateTimeToUTC(DateTime), SystemTime)
。一个可能的DateTimeToUTC
实现可以在这里找到: https://www.delphipraxis.net/207745-utc-local-time.html - Daniel Marschall