Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Änderungsdatum neu setzen, das neue Änderungsdatum liegt als TDateTime vor... Wie? (https://www.delphipraxis.net/154460-aenderungsdatum-neu-setzen-das-neue-aenderungsdatum-liegt-als-tdatetime-vor-wie.html)

juergen 11. Sep 2010 14:18

Ä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:
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;
Nun möchte ich aber das Änderungsdatum neu setzen. Der Wert liegt mir als TDateTime vor.
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!

Teekeks 11. Sep 2010 15:46

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.

DeddyH 11. Sep 2010 16:05

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.

Uwe Raabe 11. Sep 2010 16:25

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?

Disable the NTFS Last Access Time Stamp

Übrigens: Vista und Windows 7 haben das per Default schon disabled.

Sir Rufo 11. Sep 2010 16:39

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!

juergen 11. Sep 2010 17:45

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:
...
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;
...
Ich hoffe dass ich auch alles richtig verstanden und auch richtig umgesetzt habe.

@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:

Luckie 11. Sep 2010 18:21

AW: Änderungsdatum neu setzen, das neue Änderungsdatum liegt als TDateTime vor... Wi
 
Und was passiert, wenn du keine Zugriffsrechte hast? Tipp; Fehlerbehandlung.

juergen 11. Sep 2010 18:36

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:
...
try
// #6
except
  on E: Exception do ShowMessage(E.Message);
end;
...
verwendet.

Luckie 11. Sep 2010 18:50

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.

juergen 11. Sep 2010 19:12

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 14:38 Uhr.
Seite 1 von 2  1 2      

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