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

use*_*764 9 delphi date file delphi-6

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

我找不到解决方案.

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

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

我该怎么做呢?

我的意思是......

Ond*_*lle 7

基于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;
Run Code Online (Sandbox Code Playgroud)


Dav*_*nan 7

调用SetFileTimeWindows API函数.通过nillpLastAccessTimelpLastWriteTime,如果你只是想修改创建时间.

您需要通过调用CreateFile或Delphi封装器之一来获取文件句柄,因此这不是最方便的API.

通过将API调用包装在一个接收文件名和a的辅助函数中,让自己的生活更轻松TDateTime.此函数应管理获取和关闭文件句柄的低级细节,并将其转换TDateTime为a 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;
Run Code Online (Sandbox Code Playgroud)

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