フォルダの更新日、作成日の変更

解決


武田  2005-12-18 07:40:40  No: 19297

皆様にいつもお世話になっております。
フォルダの作成日更新日を変更する方法を教えていただけませんか。
ファイルはあるサイトにあった下記のような方法でできます。
フォルダはうまく変更できません。よろしくお願いいたします。m(_ _)m
var
  UpDate, CrDate: TDateTime;//更新日、作成日
begin
  SetFileDate('C:\Documents and Settings\go\デスクトップ\aaaa.txt', UpDate, CrDate);
  ・・・
procedure TformMDI.SetFileDate(FileName: string; UpDate, CrDate: TDateTime);
// TDateTime型をTFileTime型に変換する
function DateTimeToFIleTime(FileTime:TDateTime):TFileTime;
var
    LocalFileTime, Ft: TFileTime;
    SystemTime:   TSystemTime;
begin
    result.dwLowDateTime  := 0;
    result.dwHighDateTime := 0;
    DateTimeToSystemTime(FileTime, SystemTime);
    SystemTimeToFileTime(SystemTime, LocalFileTime);
    LocalFileTimeToFileTime(LocalFileTime, Ft);
    result := Ft;
end;

var
    Ut, Ct: TFileTime;
    Fs: TFileStream;
begin
    Fs := TFileStream.Create(FileName, fmOpenReadWrite);
    try
        Ct := DateTimeToFileTime(CrDate);
        Ut := DateTimeToFileTime(UpDate);
        // ファイル日付を変更する
        // SetFileTimeの詳細はWin32APIのヘルプを参照
        SetFileTime(Fs.Handle, @Ct, nil, @Ut);
    finally
        Fs.Free;
    end;
end;


tat  2005-12-18 17:09:40  No: 19298

全部は満たしてないかもしれませんが、こんな感じでしょうか
function      SetDirTime(   const   ADirName   : String;   const ADate : TDateTime   ): Boolean;
//   ディレクトリ・ファイルの時刻を変更する。
var
   FLHandle    : integer;
   Dir         : String;
Begin
   Result   := False;

   Dir      := Trim(ADirName);
   if   Dir   =   ''   then   Exit;

   {$IFDEF VER120}
   if   AnsiLastChar( Dir   )   =   '\'   then   Dir   := Copy( Dir, 1, Length(Dir)-1   );
   {$ELSE}
   Dir   := {SysUtils}ExcludeTrailingPathDelimiter(ADirName);
   {$ENDIF}

   if   DirectoryExists(   Dir   )then   begin
      //   ディレクトリの時
      FLHandle := {Windows}CreateFile(   PChar(Dir),          { 終端の\は不要/上で削除してるからこのままで可 }
                              GENERIC_WRITE,                  { 書きこみ許可/こうしないと失敗する }
                              FILE_SHARE_Read,                { 指定しないとハンドルがもらえない }
                              nil,                            { セキュリティは無視}
                              OPEN_EXISTING,                  { 既存ディレクトリが前提/一応チェックしてるのでいいかな }
                              FILE_FLAG_BACKUP_SEMANTICS,    { なんだっけ}
                              0);
      try
         Result   := ({SysUtils}FileSetDate(   FLHandle,   DateTimeToFileDate(ADate))   = 0   );
      finally
         {Windows}CloseHandle(   FLHandle   );
      end;
   end
   else   begin
      //   ファイルの時
      //   ファイルのタイムスタンプ変更をCall
   end;
End;


武田  2005-12-18 18:52:42  No: 19299

tatさん。早速ご指導有り難うございます。
これを参考に勉強してみます。
感謝いたします。
また教えてください。


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

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






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