在Delphi中擷取和修改檔案的時間

來源:互聯網
上載者:User
  首先註明,這篇文章是我在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年或更高。另外,請不要將此技術用於破壞他人檔案等非正當途徑。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.