"Geändert am" setzen
Hallo Leute
mit fileSetDate setzte ich ja das erstelldatum einer Datei. Doch wie kann ich das "Geändert am" setzen? Danke TO |
Moin The Omega,
schau Dir mal die API Funktion SetFileTime an. |
Hallo theomega,
anbei eine Procedure mit der Du die drei Zeiten setzen kannst.
Delphi-Quellcode:
bye und viel Spaß
//-----------------------------------------------------------------------//
//#######################################################################// //## Function SetFileTimes: ##// //#######################################################################// //## Datum: Änderung: ##// //## ====== ========= ##// //## 30.12.2000 Initial Release ##// //#######################################################################// function SetFileTimes(FileName: string; const Created: TDateTime; const Modified: TDateTime; const Accessed: TDateTime): Boolean; overload; var FileHandle: Integer; FTime, FTimeC, FTimeA, FTimeM: TFileTime; STime: TSystemTime; TimeFlag: Integer; begin TimeFlag := 0; Result := False; ZeroMemory(@FTime, SizeOf(FTime)); ZeroMemory(@FTime, SizeOf(FTimeC)); ZeroMemory(@FTime, SizeOf(FTimeM)); ZeroMemory(@FTime, SizeOf(FTimeA)); // Created if Created > 0 then begin DateTimeToSystemTime(Created, STime); SystemTimeToFileTime(STime, FTime); LocalFileTimeToFileTime(FTime, FTimeC); Inc(TimeFlag, 1); end; // Accessed if Accessed > 0 then begin DateTimeToSystemTime(Accessed, STime); SystemTimeToFileTime(STime, FTime); LocalFileTimeToFileTime(FTime, FTimeA); Inc(TimeFlag, 2); end; // Modified if Modified > 0 then begin DateTimeToSystemTime(Modified, STime); SystemTimeToFileTime(STime, FTime); LocalFileTimeToFileTime(FTime, FTimeM); Inc(TimeFlag, 4); end; if TimeFlag = 0 then begin Exit; // Nothing to do end; // Get a File Handle FileHandle := FileOpen(FileName, fmOpenReadWrite + fmShareExclusive); if FileHandle < 0 then begin Exit; end; case TimeFlag of 1: Result := SetFileTime(FileHandle, @FTimeC, nil, nil); 2: Result := SetFileTime(FileHandle, nil, @FTimeA, nil); 3: Result := SetFileTime(FileHandle, @FTimeC, @FTimeA, nil); 4: Result := SetFileTime(FileHandle, nil, nil, @FTimeM); 5: Result := SetFileTime(FileHandle, @FTimeC, nil, @FTimeM); 6: Result := SetFileTime(FileHandle, nil, @FTimeA, @FTimeM); 7: Result := SetFileTime(FileHandle, @FTimeC, @FTimeA, @FTimeM); end; FileClose(FileHandle); end; |
Ich habe schon einige Funktionen probiert, aber alle weigern sich, das Datum zu setzten, die beiden anderen funktionieren nur das "Geändert am" nicht.Es bleibt einfach so wie es war.
Kann sich jemand einen Reim machen? Danke TO |
Hallo theomega,
mit welchem OS arbeitest Du? Die Funktion von mir arbeitet nur unter NT, XP etc. bye |
Also, die Funktion funktioniert nicht.
GetLastError gibt 87 zurück, was laut MSDN "The parameter is incorrect" bedeutet. Sagt mir aber garnichts. OS ist WinXP allerdings wäre es nicht schlecht, wenn die Funktion auch unter Win98 laufen würde! |
Moin Duffy,
gemäss PSDK ist SetFileTime in 9x/ME/NTff enthalten. |
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo theomega,
ich hab da einen Fehler im Code gemacht, das overload muß weg. Wie's geht, siehe Beispiel. Rest: siehe Christian Seehase (ich habs nicht ausprobiert!) bye |
oki, dein Code geht und meiner nicht. Könnte sich bitte mal einer das hier anschauen:
Delphi-Quellcode:
Warum geht das nicht?
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,dateutils, ComCtrls, EnhListView, ExtListView, ExtCtrls, Mask,JclFileUtils; type TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; Button1: TButton; Button2: TButton; Label3: TLabel; Edit3: TEdit; listview1: TdfsExtListView; Label2: TLabel; Label4: TLabel; Edit2: TEdit; Label5: TLabel; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; Label6: TLabel; Label7: TLabel; Bevel1: TBevel; Bevel2: TBevel; Button3: TButton; Bevel3: TBevel; MaskEdit1: TMaskEdit; MaskEdit2: TMaskEdit; Bevel4: TBevel; CheckBox1: TCheckBox; CheckBox2: TCheckBox; CheckBox3: TCheckBox; procedure Button2Click(Sender: TObject); procedure doit(filenamef:string;dis:TDateTime); private function SetFileTimes(FileName: string; const Created: TDateTime; const Modified: TDateTime; const Accessed: TDateTime): Boolean; { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} function TForm1.SetFileTimes(FileName: string; const Created: TDateTime; const Modified: TDateTime; const Accessed: TDateTime): Boolean; var FileHandle: Integer; FTime, FTimeC, FTimeA, FTimeM: TFileTime; STime: TSystemTime; TimeFlag: Integer; begin TimeFlag := 0; Result := False; ZeroMemory(@FTime, SizeOf(FTime)); ZeroMemory(@FTime, SizeOf(FTimeC)); ZeroMemory(@FTime, SizeOf(FTimeM)); ZeroMemory(@FTime, SizeOf(FTimeA)); // Created if Created > 0 then begin DateTimeToSystemTime(Created, STime); SystemTimeToFileTime(STime, FTime); LocalFileTimeToFileTime(FTime, FTimeC); Inc(TimeFlag, 1); end; // Accessed if Accessed > 0 then begin DateTimeToSystemTime(Accessed, STime); SystemTimeToFileTime(STime, FTime); LocalFileTimeToFileTime(FTime, FTimeA); Inc(TimeFlag, 2); end; // Modified if Modified > 0 then begin DateTimeToSystemTime(Modified, STime); SystemTimeToFileTime(STime, FTime); LocalFileTimeToFileTime(FTime, FTimeM); Inc(TimeFlag, 4); end; if TimeFlag = 0 then begin Exit; // Nothing to do end; // Get a File Handle FileHandle := FileOpen(FileName, fmOpenReadWrite + fmShareExclusive); if FileHandle < 0 then begin Exit; end; case TimeFlag of 1: Result := SetFileTime(FileHandle, @FTimeC, nil, nil); 2: Result := SetFileTime(FileHandle, nil, @FTimeA, nil); 3: Result := SetFileTime(FileHandle, @FTimeC, @FTimeA, nil); 4: Result := SetFileTime(FileHandle, nil, nil, @FTimeM); 5: Result := SetFileTime(FileHandle, @FTimeC, nil, @FTimeM); 6: Result := SetFileTime(FileHandle, nil, @FTimeA, @FTimeM); 7: Result := SetFileTime(FileHandle, @FTimeC, @FTimeA, @FTimeM); end; FileClose(FileHandle); end; procedure TForm1.Button2Click(Sender: TObject); var sr:TSearchRec; dis:integer; offset,off1,off2:TDateTime; tl:TListItem; begin //Überprüfen listview1.Items.Clear; off1 := strtodate(maskedit1.text)+encodetime(strtoint(edit2.text),strtoint(edit5.text),0,0); off2 := strtodate(maskedit2.text)+encodetime(strtoint(edit4.text),strtoint(edit6.text),0,0); offset := off2-off1; if findfirst(edit1.text+edit3.text,0,sr) = 0 then begin; repeat dis := datetimetofiledate(filedatetodatetime(sr.Time) + offset); tl := listview1.Items.Add; tl.Caption := sr.Name; tl.SubItems.Add(datetimetostr(filedatetodatetime(sr.Time))); tl.SubItems.Add(datetimetostr(filedatetodatetime(dis))); // if sender=button2 then begin; doit(edit1.Text+sr.Name,dis); // end; UNTIL FindNext(sr) <> 0; findclose(sr); end; end; procedure TForm1.doit(filenamef:string;dis:TDateTime); begin; SetFileTimes(filenamef,dis,dis,dis); if (getlasterror>0) then showmessage(inttostr(getlasterror)); end; end. Danke TO |
Hallo theomega,
wenn ich das jetzt so auf die Schnelle sehe, wandelst Du das Datum in dis := datetimetofiledate(filedatetodatetime(sr.Time) + offset); versuch es mal so
Delphi-Quellcode:
die Funktion erwartet das Datum als TDateTime
dis := filedatetodatetime(sr.Time) + offset;
bye |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz