我不喜欢写太复杂的代码,就写的简单一点吧。下面的例子更改文件的创建时间,SetFileTime的另外两个参数是文件最后访问时间和最后更改时间,你可以照猫画虎。procedure SomeProc;
var
  f : TFileStream;
  ft : FILETIME;
  st : SYSTEMTIME;
begin
  f := TFileStream.Create('WIN.TXT', fmOpenReadWrite);
  GetFileTime(f.Handle, @ft, nil, nil);
  FileTimeToSystemTime(ft, st);
  st.wYear := 2000;
  st.wMonth := 1;
  st.wDay := 1;
  SystemTimeToFileTime(st, ft);
  SetFileTime(f.Handle, @ft, nil, nil);
  f.Destroy;
end;

解决方案 »

  1.   

    //兄弟,拿去用吧
    function SetFileDateTime(AFileName: string; ADateTime: TDateTime): boolean;
    var
      FileHandle: integer;
      ST: TSystemTime;
      FT: TFileTime;
      OldAttr: word;
    begin
      Result := false;
      try
        OldAttr := FileGetAttr(AFileName);
        //如果是只读文件,去掉只读属性
        if OldAttr and faReadOnly > 0 then
          FileSetAttr(AFileName, OldAttr and not faReadOnly);
      except
        exit;
      end;
      FileHandle := FileOpen(AFileName, fmOpenWrite or fmShareDenyNone);
      if FileHandle > 0 then
      try
        //将 Delphi 的 TDateTime 转为系统时间
        DateTimeToSystemTime(ADateTime, ST);
        //将系统时间转为本地文件时间
        SystemTimeToFileTime(ST, FT);
        //将本地文件时间转为文件时间
        LocalFileTimeToFileTime(FT, FT);
        //设置文件时间
        Result := SetFileTime(FileHandle, @FT, @FT, @FT);
      finally
        FileClose(FileHandle);
        //恢复文件属性
        FileSetAttr(AFileName, OldAttr);
      end;
    end;