国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Delphi > 正文

在Delphi中獲取和修改文件的時間

2019-11-18 18:16:19
字體:
來源:轉載
供稿:網友
在Delphi中獲取和修改文件的時間

  本文介紹了在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年或更高。另外,請不要將此技術用于破壞他人文件等非正當途徑。


上一篇:delphi中command/action的疑惑

下一篇:用Delphi實現整個網站圖片的極速下載

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 定结县| 武清区| 万安县| 金华市| 阿勒泰市| 麟游县| 石狮市| 黄浦区| 莱州市| 海兴县| 慈溪市| 孝昌县| 黄大仙区| 浏阳市| 营口市| 遂平县| 淳化县| 拉萨市| 卫辉市| 新源县| 泰安市| 元朗区| 乐平市| 建湖县| 罗定市| 赤峰市| 紫阳县| 郎溪县| 永川市| 娄烦县| 眉山市| 山阳县| 嘉鱼县| 邻水| 滨海县| 杭州市| 鹿邑县| 密云县| 通榆县| 鹤峰县| 阿鲁科尔沁旗|