修改文件时间

var
  FS: TSearchRec;
  FPath: String;

begin
  FPath := IncludeTrailingPathDelimiter(dir);                   {dir是目标文件}

  if  FindFirst(FPath + '*.*', faAnyFile, FS) = 0 then

  begin

   FileTimeToLocalFileTime(FS.FindData.ftLastWriteTime, Temp);//FS.FindData.ftLastWriteTime找出文件修改时间
         FileTimeToSystemTime(Temp, Tct);
         dateTime := SystemTimeToDateTime(Tct); //转成系统时间

  end;

function CovFileDate(const Fd: FileTime):TDateTime;   // 转换文件的时间格式
var
  Tct: SystemTime;
  Temp: FileTime;
begin
  FileTimeToLocalFileTime(Fd,Temp);
  FileTimeToSystemTime(Temp,Tct);
  result :=SystemTimeToDateTime(Tct);
end;

function TForm22.GetFileTime(const FilePath:string): TDateTime;    // 得到文件时间,输入值表示目标文件的路径

const
  Model='yyyy/mm/dd hh:mm:ss'; // 这是时间的格式
var
  Tp: TSearchRec;
  T1, T2, T3: string;
begin
  FindFirst(FilePath,faAnyFile,Tp); // 查找目标文件
  T1 := FormatDateTime(Model, CovFileDate(Tp.FindData.ftCreationTime)); // 返回文件的创建时间
  T2 := FormatDateTime(Model, CovFileDate(Tp.FindData.ftLastWriteTime));  //返回文件的修改时间
  T3 := FormatDateTime(Model,Now);       //返回文件的当前访问时间
  FindClose(Tp);
end;

procedure SetFileDateTime(const Tf: string; T1, T2: TDateTime);   //设置文件时间,输入值表示目标文件的路径
var
Dt1,Dt2:Integer;
Fs:TFileStream;
Fct,Flt:TFileTime;
begin

Dt1:=DateTimeToFileDate(T1);       { T1:创建时间}
Dt2:=DateTimeToFileDate(T2);        {修改时间}

try
FS := TFileStream.Create(Tf, fmOpenReadWrite);    //创建TFileStream
try
if DosDateTimeToFileTime(LongRec(DT1).Hi, LongRec(DT1).Lo, Fct) and LocalFileTimeToFileTime(Fct, Fct) and dosDateTimeToFileTime(LongRec(DT2).Hi, LongRec(DT2).Lo, Flt) and LocalFileTimeToFileTime(Flt, Flt)
then SetFileTime(FS.Handle,@Fct, @Flt, @Flt);   // 设置文件时间属性
finally
FS.Free;            //释放
end;
//MessageDlg('修改成功',mtconfirmation, [mbOk], 0);     //提示成功
except
//MessageDlg('修改失败',mtError, [mbOk], 0);   //因为目标文件正在被使用等原因而导致失败
end;
end;

posted @ 2012-10-17 10:43  邹晟  阅读(309)  评论(0编辑  收藏  举报