Delphi 6:如何更改创建的提交者(=文件创建日期)

我一直在谷歌搜索HOURS(和这里).

我找不到解决方案.

我想在DELPHI 6中更改“Created Filetime”(=创建文件时间).

不是“修改文件时间”(需要简单调用“FileSetDate()”)
而不是“上次访问的文件时间”.

我该怎么做呢?

解决方法

调用 SetFileTime Windows API函数.如果您只想修改创建时间,则为lpLastAccesstime和lpLastWriteTime传递nil.

您需要通过调用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) then
      RaiseLastOSError;
  finally
    CloseHandle(Handle);
  end;
end;

我不得不添加FILE_WRITE_ATTRIBUTES的声明,因为它在Delphi 6 Windows单元中不存在.

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...