Delphiでファイルを取得して変更する時間
この記事では、システム関数とWindows API関数呼び出しを使用して、Delphiでファイル時間情報を取得および変更する方法を紹介します。
Windows 95/98に精通している友人は、右クリックメソッドを使用して、選択したファイルの属性情報を表示することがよくあります。ファイルの作成時間、変更時間、およびアクセス時間は、プロパティメニューにリストされています。この情報は多くの場合非常に有用であり、通常、設定はオペレーティングシステム(つまり、DOS/Windowsなど)によって自動的に完了し、ユーザーが簡単に変更することはできません。
ここでは、Delphiでファイル時間を取得して変更する方法を紹介します。 Delphiは、Windows API関数の完全なコールインターフェイスを提供します。これにより、高度なWindowsプログラミングが促進されます。 DelphiのFindFirst関数を使用すると、ファイル属性レコードを取得でき、このレコードのFindDataフィールドは詳細なファイル時間情報を記録します。残念ながら、FindDataの時間情報を直接取得することはできません。したがって、誰か(編集者のメモ:この人の名前がわからないのは申し訳ありません)は、ファイル時間形式の変換を完了するための変換関数を書きました。特定の実装方法は、参照のみを以下に示します。
関数covfiledate(fd:_filetime):tdateTime;
{ファイル時間形式を変換}
var
TCT:_systemTime;
温度:_filetime;
始める
filetimeTolocalfiletime(fd、temp);
FileTimetosystemTime(TEMP、TCT);
covfiledate:= SystemTimetodateTime(TCT);
終わり;
上記の関数サポートを使用すると、ファイルの時間情報を取得できます。簡単な例を次に示します。
procdeure getfiletime(const tf:string);
{ファイル時間を取得する、tfはターゲットファイルパスと名前を表します}
const
モデル= yyyy/mm/dd、hh:mm:ss;
var
TP:TsearchRec;
T1、T2、T3:文字列;
始める
findFirst(tf、faanyfile、tp);
covfiledate(tp.finddata.ftcreationtime)));
{ファイルの作成時間を返します}
T2:= formatdateTime(モデル、
covfiledate(tp.finddata.ftlastwritetime)));
{ファイルの変更時間を返します}
T3:= formatdateTime(モデル、今));
{ファイルの現在のアクセス時間を返します}
findclose(tp);
終わり;
ファイルを設定する時間は、この複雑な操作の完了を支援するために、Datatimepickerコンポーネントの使用を導入します。次の例では、4つのDataTimePickerコンポーネントを使用して、ファイルの作成時間と変更時間の設定を完了します。注:ファイルのアクセス時間は、変更時間に置き換えられます。以下の例を使用する場合は、フォームに4つのDatAtimePickerコンポーネントを追加します。 1番目と3番目のDataTimepickerコンポーネントの種類がDTKDateに設定され、2番目と4番目のDataTimePickerコンポーネントの種類がDTKTimeに設定されます。
手順SetFileDateTime(const tf:string);
{ファイル時間の設定、tfはターゲットファイルパスと名前を表します}
var
DT1、DT2:整数;
FS:tfilestream;
fct、flt:tfiletime;
始める
DT1:= DateTimetOfileDate(
trunc(form1.datetimepicker1.date) + frac(form1.datetimepicker2.time));
DT2:= DateTimetOfileDate(
trunc(form1.datetimepicker3.date) + frac(form1.datetimepicker4.time));
{datatimepickerでユーザーが入力した情報を変換}
試す
fs:= tfilestream.create(tf、fmopenreadwrite);
試す
dosdatetimetofiletime(longrec(dt1).hi、longrec(dt1).lo、fct)および
localfiletimetofiletime(fct、fct)および
dosdatetimetofiletime(longrec(dt2).hi、longrec(dt2).lo、flt)および
localfiletimetofiletime(flt、flt)
その後、setfiletime(fs.handle、
@fct、@flt、@flt);
{ファイル時間属性を設定}
ついに
fs.free;
終わり;
を除外する
MESSAGEDLG(日付変更操作に失敗しました!、
mterror、[mbok]、0);
{ターゲットファイルが使用されているなど、失敗しました}
終わり;
終わり;
上記では、ファイル時間属性を変更する方法を簡単に紹介します。1792年9月19日にファイル時間を変更し、上限は2999以上に達する可能性があります。また、他の人の文書を破壊するなど、不当な方法にこのテクノロジーを使用しないでください。