在Delphi中获取和修改文件的时间

  首先注明,这篇文章是我在CSDN查找相关资料的时候,在一个帖子里面看到的,因此无法获知原出处了,希望原作者不要怪罪。。。
   
    本文介绍了在Delphi中利用系统函数和Windows   API函数调用来获取和修改文件的时间信息的方法。  
   
  熟悉Windows   95/98的朋友一定经常会用单击鼠标右键的方法来查看所选定的文件的属性信息。在属性菜单中会列出该文件的创建时间、修改时间和访问时间。这些信息常常 是很有用的,它们的设置一般都是由操作系统(也就是由Dos/Windows等等)自动完成的,不会让用户轻易修改。  
   
  这里,我向大家介绍在Delphi中如何实现文件时间的获取和修改方法。Delphi中提供了很完备的Windows   API函数的调用接口,可以方便的进行高级Windows编程。利用Delphi中的FindFirst函数可以得到一个文件的属性记录,该记录中的 FindData域中就记载了详细的文件时间信息。然而遗憾的是,FindData中的时间信息是不能直接得到的。因此,本人编写了一个转换函数来完成文 件时间格式的转换。下面给出了具体的实现方法,仅供参考:  
  function   CovFileDate(Fd:_FileTime):TDateTime;  
  {   转换文件的时间格式   }  
  var  
  Tct:_SystemTime;  
  Temp:_FileTime;  
  begin  
  FileTimeToLocalFileTime(Fd,Temp);  
  FileTimeToSystemTime(Temp,Tct);  
  CovFileDate:=SystemTimeToDateTime(Tct);  
  end;  
  有了上面的函数支持,我们就可以获取一个文件的时间信息了。以下是一个简单的例子:  
  procdeure   GetFileTime(const   Tf:string);  
  {   获取文件时间,Tf表示目标文件路径和名称   }  
  const  
  Model='yyyy/mm/dd,hh:mm:ss';   {   设定时间格式   }  
  var  
  Tp:TSearchRec;   {   申明Tp为一个查找记录   }  
  T1,T2,T3:string;  
  begin  
  FindFirst(Tf,faAnyFile,Tp);   {   查找目标文件   }   T1:=FormatDateTime(Model,  
  CovFileDate(Tp.FindData.ftCreationTime)));  
  {   返回文件的创建时间   }  
  T2:=FormatDateTime(Model,  
  CovFileDate(Tp.FindData.ftLastWriteTime)));  
  {   返回文件的修改时间   }  
  T3:=FormatDateTime(Model,Now));  
  {   返回文件的当前访问时间   }  
  FindClose(Tp);  
  end;  
  设置文件的时间要复杂一些,这里介绍利用Delphi中的DataTimePicker组件来辅助完成这一复杂的操作。下面的例子利用了四个 DataTimePicker组件来完成文件创建时间和修改时间的设置。注意:文件的访问时间用修改时间来代替。使用下面的例子时,请在您的Form上添 加四个DataTimePicker组件。其中第一和第三个DataTimePicker组件中的Kind设置为dtkDate,第二个和第四个 DataTimePicker组件中的Kind设置为dtkTime.  
  procedure   SetFileDateTime(const   Tf:string);  
  {   设置文件时间,Tf表示目标文件路径和名称   }  
  var  
  Dt1,Dt2:Integer;  
  Fs:TFileStream;  
  Fct,Flt:TFileTime;  
  begin  
  Dt1:=DateTimeToFileDate(  
  Trunc(Form1.DateTimePicker1.Date)   +   Frac(Form1.DateTimePicker2.Time));  
  Dt2:=DateTimeToFileDate(  
  Trunc(Form1.DateTimePicker3.Date)   +   Frac(Form1.DateTimePicker4.Time));  
  {   转换用户输入在DataTimePicker中的信息   }  
  try  
  FS   :=   TFileStream.Create(Tf,   fmOpenReadWrite);  
  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;  
  except  
  MessageDlg('日期修改操作失败!',    
  mtError,   [mbOk],   0);  
  {   因为目标文件正在被使用等原因而导致失败   }  
  end;  
  end;  
  以上简单介绍了文件时间属性的修改方法,请注意:修改文件时间的范围是从公元1792年9月19日开始的,上限可以达到公元2999年或更高。另外,请不要将此技术用于破坏他人文件等非正当途径。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值