![]() |
Änderungsdatum neu setzen, das neue Änderungsdatum liegt als TDateTime vor... Wie?
Hallo zusammen,
ich nutze GetFileDateTime und SetFileDateTime um die 3 Datumseigenschaften von Dateien auszulesen und später wieder rückzuschreiben. Damit ändern sich letztlich die 3 Datumswerte der Dateien nicht, wenn ich die Dateien in einer anderen Procedure bearbeitet habe.
Delphi-Quellcode:
Nun möchte ich aber das Änderungsdatum neu setzen. Der Wert liegt mir als TDateTime vor.
procedure TTest.GetFileDateTime(const TheFile: string; var fCreationTime, fLastAccessTime, fLastWriteTime: FileTime);
var fh: THandle; begin fh := FileOpen(TheFile, fmOpenRead); GetFileTime(fh, @fCreationTime, @fLastAccessTime, @fLastWriteTime); CloseHandle(fh); end; procedure TTest_Form.SetFileDateTime(const TheFile: string; fCreationTime, fLastAccessTime, fLastWriteTime: FileTime); var fh: THandle; begin fh := FileOpen(TheFile, fmOpenReadWrite); SetFileTime(fh, @fCreationTime, @fLastAccessTime, @fLastWriteTime); CloseHandle(fh); end; Ich habe nun schon einiges probiert, bekomme es aber leiderr nicht hin. Kann man @fLastAccessTime überhaupt "manipulieren"? Für Hilfe wäre ich sehr dankbar! |
AW: Änderungsdatum neu setzen, das neue Änderungsdatum liegt als TDateTime vor... Wi
Nunja, dieses Datum ist dazu da, anzuzeigen wann man zuletzt etwas an der Datei gemacht hat.
Ich denke also nicht das es allzu einfach wird. |
AW: Änderungsdatum neu setzen, das neue Änderungsdatum liegt als TDateTime vor... Wi
Wo liegt das Problem? In der Umwandlung von TDateTime in TFileTime? Ich kann gerade nicht nachsehen, aber mit DateTimeToSystemTime und anschließend SystemTimeToFileTime müsste das doch gehen.
|
AW: Änderungsdatum neu setzen, das neue Änderungsdatum liegt als TDateTime vor... Wi
Vielleicht muss man Windows vorher mitteilen, daß es die LastAccessTime nicht selbständig setzen soll?
![]() Übrigens: Vista und Windows 7 haben das per Default schon disabled. |
AW: Änderungsdatum neu setzen, das neue Änderungsdatum liegt als TDateTime vor... Wi
LastAccessTime = Letzter Zugriff
LastWriteTime = Letzte Änderung CreationTime = Erzeugung Wenn du den Zeitpunkt für "Letzte Änderung" setzen möchtest, dann solltest Du "LastWriteTime" und nicht "LastAccessTime" setzen! |
AW: Änderungsdatum neu setzen, das neue Änderungsdatum liegt als TDateTime vor... Wi
Hallo,
so, nach einigem Testen hab ich es nun auch geschafft. Ein dickes Dankeschön sende ich an DeddyH' für die beiden entscheidenden Hinweise!:thumb: Meine Umsetzung:
Delphi-Quellcode:
Ich hoffe dass ich auch alles richtig verstanden und auch richtig umgesetzt habe.
...
var Time1: SystemTime; Time2: TFileTime; my_Handle: THandle; ... begin ... my_Handle := FileOpen(Main_Form.sl_Master[i], fmOpenWrite or fmShareDenyNone); DateTimeToSystemTime(ExifData.DateTimeOriginal, Time1); SystemTimeToFileTime(Time1, Time2); SetFileTime(my_Handle, @Time2, @Time2, @Time2); CloseHandle(my_Handle); ... end; ... @Sir Rufo, danke für den Hinweis, ich war wohl zu unpräzise. Ich möchte das Änderungsdatum setzen, wie es in der Explorerspalte "Änderungsdatum" auch angezeigt wird. Da müsste "LastAccessTime" richtig sein. Danke an alle für die Unterstützung und ein schönes Wochenende! :dp: |
AW: Änderungsdatum neu setzen, das neue Änderungsdatum liegt als TDateTime vor... Wi
Und was passiert, wenn du keine Zugriffsrechte hast? Tipp; Fehlerbehandlung.
|
AW: Änderungsdatum neu setzen, das neue Änderungsdatum liegt als TDateTime vor... Wi
@Luckie,
ich hatte nur auszugsweise aufgezeigt. Für deine berechtigte Ergänzung hatte ich
Delphi-Quellcode:
verwendet.
...
try // #6 except on E: Exception do ShowMessage(E.Message); end; ... |
AW: Änderungsdatum neu setzen, das neue Änderungsdatum liegt als TDateTime vor... Wi
API-Funktionen werfen keine Exceptions, sondern geben Fehlercodes zurück. Du musst die Exception also selber werfen.
|
AW: Änderungsdatum neu setzen, das neue Änderungsdatum liegt als TDateTime vor... Wi
:oops:, das wusste ich überhaut nicht und würde gern ein richtige Fehlerbehandlung einsetzen. Danke für den Hinweis!
Meinst du mit "Fehlercodes" sowas wie GetLastError? Wie müsste man eine richtige Fehlerbehandlung umsetzen? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz