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

2021-06-09 21:14:41 字數 2603 閱讀 7540

首先註明,這篇文章是我在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);

const

model='yyyy/mm/dd,hh:mm:ss';

var

tp:tsearchrec;

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);

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));

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;

以上簡單介紹了檔案時間屬性的修改方法,請注意:修改檔案時間的範圍是從公元2023年9月19日開始的,上限可以達到公元2023年或更高。另外,請不要將此技術用於破壞他人檔案等非正當途徑。

經測試用以上方法獲取檔案建立時間,再用這個建立時間修改另乙個檔案的建立時間,會有1s的差別。用獲取時間的逆方法沒有差別。

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

首先註明,這篇文章是我在csdn查詢相關資料的時候,在乙個帖子裡面看到的,因此無法獲知原出處了,希望原作者不要怪罪。本文介紹了在delphi中利用系統函式和windows api函式呼叫來獲取和修改檔案的時間資訊的方法。熟悉windows 95 98的朋友一定經常會用單擊滑鼠右鍵的方法來檢視所選定的...

Delphi 中獲取檔案大小

大概有這些方法可以獲得檔案大小 filesizebyname 需要引用idglobal單元 getfilesize filesize 不能獲得正在使用的檔案大小 fileseek tfilestream.size 下面是使用例子 1.filesizebyname 需要引用idglobal單元 beg...

Delphi中獲取檔案大小

大概有這些方法可以獲得檔案大小 filesizebyname 需要引用idglobal單元 getfilesize filesize 不能獲得正在使用的檔案大小 fileseek tfilestream.size 下面是使用例子 1。filesizebyname 需要引用idglobal單元 beg...