フォルダの作成日時をフォルダ名に

解決


ss  2013-02-16 07:47:22  No: 43878

こんにちは
フォルダの作成日時をフォルダ名にするため、
フォルダの作成日時を取得するため以下のようにしました。
日付は取れるのですが、おかしな日付となります。
良い方法はないでしょうか?
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;


Mr.XRAY  2013-02-16 09:06:23  No: 43879

こんちには,

D:\test01

これは,フォルダでしょうか ? ファイルでしょうか ?
hFile の値を調べてみてくださいませ.

[System.SysUtils.FileOpen - XE3 API Documentation]
http://docwiki.embarcadero.com/Libraries/XE3/ja/System.SysUtils.FileOpen


naoko01  2013-02-17 06:40:02  No: 43880

もしかするとWindowsのデフォルト動作の話で、同名のファイルをすぐ作り直すと、その前にあったファイルの作成日時が引き継がれる
というのが関係しているかも。
ぐぐると変更方法は見つかります。


Mr.XRAY  2013-02-18 02:37:12  No: 43881

放置スレっぽいので,質問者からの応答なしですが,レスしておきます.

ファイルやフォルダの作成日時を取得する方法は,いくつか考えれますが,
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;


Mr.XRAY  2013-02-18 02:46:39  No: 43882

毎度の手前ミソですが,参考になれば.

[08_指定フォルダ内のファイルの日時を一括変更]
http://mrxray.on.coocan.jp/Delphi/plSamples/780_FileInfoListETC.htm#08


ss  2013-02-20 08:56:14  No: 43883

MrXrayさんいつもありがとうございます。
08_指定フォルダ内のファイルの日時を一括変更]を
検索で見つけられたので作成していたところでした。
Sampleをまでいただきありがとうございます。
なんとか解決できました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加