ディレクトリーの作成日付、更新日付、アクセス日付を得る方法を教えてください。簡単そうなのに見つかりません。
ファイルハンドル := Windows.FindFirstFile(フォルダ名, TWin32FindData型変数)
Windows.FindClose(ファイルハンドル);
日付関連
TWin32FindData型変数.ftCreationTime
TWin32FindData型変数.ftLastWriteTime
TWin32FindData型変数.ftLastAccessTime
最後に...
FileTimeToLocalFileTime:たぶんタイムゾーンに合わせた日付に変換
FileTimeToDosDateTime:DOSの日付形式(整数型)に変換
FileDateToDateTime:TDateTime型に変換
・・・で、とってきています。
どうもありがどうございました。Windows.FindFirstFileという関数についてはまったく知りませんでした。
ついでで恐縮ですが、各日付をTDateTimeに変換するには、次のように
TFileTime⇒TSystemTime⇒TDateTimeのような2段かでの変換しか方法はないのでしょうか。
例
procedure TForm1.Button1Click(Sender: TObject);
var
Handle: THandle;
Data: TWin32FindData;
ft: TFileTime;
st: TSystemTime;
dt: TDateTime;
begin
Handle := Windows.FindFirstFile('C:\Temp\新しいフォルダ', Data);
if Handle = INVALID_HANDLE_VALUE then
Label1.Caption := '見つかりません'
else
begin
FileTimeToLocalFileTime(Data.ftLastWriteTime, ft);
FileTimeToSystemTime(ft, st);
dt := SystemTimeToDateTime(st);
Label1.Caption := FormatDateTime('YYYY.mm.dd hh:mm:ss', dt);
FileTimeToLocalFileTime(Data.ftLastAccessTime, ft);
FileTimeToSystemTime(ft, st);
dt := SystemTimeToDateTime(st);
Label2.Caption := FormatDateTime('YYYY.mm.dd hh:mm:ss', dt);
FileTimeToLocalFileTime(Data.ftCreationTime, ft);
FileTimeToSystemTime(ft, st);
dt := SystemTimeToDateTime(st);
Label3.Caption := FormatDateTime('YYYY.mm.dd hh:mm:ss', dt);
end;
end;
ソースをお持ちであれば、SysUtils.FileAge関数をご覧アレ
FindFirstFile〜FindClose〜FileTimeToLocalFileTime〜FileTimeToDosDateTime
で、タイムスタンプ取得しています。
そして、FileAgeのHelpには、以下の記述があります
> 戻り値は,FileDateToDateTime 関数を使って TDateTime オブジェクトに変換できます
ということで、自分で関数を作る以外にないか、(あれば)別の方法を使うしかないでしょうな。
どうもありがとうございました。
SysUtils.FileAge関数のソースまで見ることは、思いもよらなかったです。
今後は、困ったときには、そこから見てみたいと思います。
ツイート | ![]() |