皆様にいつもお世話になっております。
フォルダの作成日更新日を変更する方法を教えていただけませんか。
ファイルはあるサイトにあった下記のような方法でできます。
フォルダはうまく変更できません。よろしくお願いいたします。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;
全部は満たしてないかもしれませんが、こんな感じでしょうか
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;
tatさん。早速ご指導有り難うございます。
これを参考に勉強してみます。
感謝いたします。
また教えてください。
ツイート | ![]() |