こんにちは
フォルダの作成日時をフォルダ名にするため、
フォルダの作成日時を取得するため以下のようにしました。
日付は取れるのですが、おかしな日付となります。
良い方法はないでしょうか?
WinXp Delphi7です。
よろしくお願いします。
procedure TForm1.Button2Click(Sender: TObject);
var
FileName: string;
hFile: integer;
ftCreateDate,
ftModifyDate,
ftAccessDate: TFileTime;
lftCreateDate : TFileTime;
stCreateDate : TSystemTime;
begin
FileName:='D:\test01';
hFile:=FileOpen(FileName,fmOpenRead); //読みとり専用でファイルを開く
GetFileTime(hFile,@ftCreateDate,@ftAccessDate,@ftModifyDate); //ファイルの日時を取得
{ローカル日時に変更}
FileTimeToLocalFileTime(ftCreateDate,lftCreateDate);
{システム日時に変更}
FileTimeToSystemTime(lftCreateDate,stCreateDate);
{作成日時}
ShowMessage(FormatDateTime('yyyy/mm/dd hh:nn:ss',SystemTimeToDateTime(stCreateDate)));
{修正日時}
FileClose(hFile); //ファイルを閉じる
end;
こんちには,
D:\test01
これは,フォルダでしょうか ? ファイルでしょうか ?
hFile の値を調べてみてくださいませ.
[System.SysUtils.FileOpen - XE3 API Documentation]
http://docwiki.embarcadero.com/Libraries/XE3/ja/System.SysUtils.FileOpen
もしかするとWindowsのデフォルト動作の話で、同名のファイルをすぐ作り直すと、その前にあったファイルの作成日時が引き継がれる
というのが関係しているかも。
ぐぐると変更方法は見つかります。
放置スレっぽいので,質問者からの応答なしですが,レスしておきます.
ファイルやフォルダの作成日時を取得する方法は,いくつか考えれますが,
Delphi 7 というので,こんなところでいいのかも.
//=============================================================================
// フォルダまたはファイルの作成日時取得
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
FolderPath : String;
ADateTime : TDateTime;
SearchRec : TSearchRec;
AFileData : TWin32FindData;
begin
FolderPath := 'D:\000'; //というフォルダまたはファイルの場合
if FindFirst(FolderPath, faAnyFile, SearchRec) = 0 then begin
AFileData := SearchRec.FindData;
//作成日
ADateTime := FileTimeToDateTime(AFileData.ftCreationTime);
Edit1.Text := FormatDateTime('yyyy年mm月dd日 hh時nn分', ADateTime);
FindClose(SearchRec);
end;
end;
//=============================================================================
// TFileTime型の値をDelphiのTDateTime型に変換する関数
//=============================================================================
function TForm1.FileTimeToDateTime(ATime: TFileTime): TDateTime;
var
SystemTime : TSystemTime;
TempTime : TFileTime;
begin
try
//FileTime形式(世界協定時刻)を地域にあわせる
FileTimeToLocalFileTime(ATime, TempTime);
//FileTime形式をSystemTime形式にする
FileTimeToSystemTime(TempTime, SystemTime);
//SystemTime形式をDelphiのTDateTime形式に変換
Result := SystemTimeToDateTime(SystemTime);
except
Result := 0;
end;
end;
毎度の手前ミソですが,参考になれば.
[08_指定フォルダ内のファイルの日時を一括変更]
http://mrxray.on.coocan.jp/Delphi/plSamples/780_FileInfoListETC.htm#08
MrXrayさんいつもありがとうございます。
08_指定フォルダ内のファイルの日時を一括変更]を
検索で見つけられたので作成していたところでした。
Sampleをまでいただきありがとうございます。
なんとか解決できました。
ツイート | ![]() |