Einzelnen Beitrag anzeigen

gkoeder

Registriert seit: 15. Jun 2004
84 Beiträge
 
Delphi 2010 Professional
 
#1

Probleme beim setzen des Änderungsdatums einer Datei

  Alt 30. Okt 2007, 15:46
Hallo!

Ich muss bei einer größeren Anzahl von Office-Dateien die Metainformation "Kommentar" befüllen. Wichtig ist hierbei, dass das Datum der letzten Änderung an der Datei gleich bleibt (wird intern für Auswertungen herangezogen). Ich habe soweit ein kleines Tool zusammengebastelt, wo diese Aufgabenstellung erfüllt.

Der einfachheit halber verwende ich Funktionen aus der JCL. Der grundsätzliche Aufbau ist wie folgt:

Delphi-Quellcode:
var
 LineCounter: Integer;
 OldFileTime: tFileTime;
 OldDateTime: tDateTime;
 CurrentFileTime: tFiletime;
 CurrentDateTime: tDateTime;
 CurrentFile: String;
begin
 ...
 // Aktuellen Dateinamen in String schreiben zur besseren Übersichtlichkeit
 CurrentFile := Memo_FileList.Lines[LineCounter];
 // Überprüfen, ob die referenzierte Datei auch wirklich existiert
 if FileExists(CurrentFile) = True then
   Begin
     // Aktuelles Änderungsdatum der Datei erfassen
     // GetFileLastWrite returns the date/time that the specified file was last written
     // to. The return value is a UTC based TFileTime value which can be converted to
     // the familiar TDateTime by using FileTimeToDateTime function.
     OldFileTime := GetFileLastWrite(CurrentFile);
     OldDateTime := FileTimeToDateTime(OldFileTime);
     // Änderung an den Dateieigenschaften vornehmen
     If SetFileSummaryInfo(CurrentFile, FMTID_DocSummaryInformation, PIDDSI_CATEGORY, GetCategoryType) = False
     Then Memo_Log.Lines.Add('Setzen der Kategorie fehlgeschlagen: ' + CurrentFile);

     // Änderungsdatum wieder in Datei zurückschreiben (UTC-Format)
     // const DateTime: TDateTime ->
     // The date and time to set the file's last write stamp to. You must supply
     // the UTC based date and time. To convert from a local date and time use the
     // LocalDateTimeToDateTime function from JclDateTime.
     SetFileLastWrite(CurrentFile, OldDateTime);
   end else
   Begin
     Memo_Log.Lines.Add('Datei nicht gefunden: ' + CurrentFile);
   end;
 end;
Das ganze funktioniert auch eigentlich ganz gut. Das Problem besteht lediglich beim setzen des Änderungsdatums. Bei lokalen Dateien wird Datum/Uhrzeit korrekt gesetzt. Sobald ich aber Dateien auf einem Netzwerklaufwerk bearbeite (Windows 2k3 Server), dann stellt sich die Uhrzeit der letzten Änderung der Datei 2h vor. Das Datum wird korrekt übernommen.
Ich hab schon verschiedene Varianten und Funktionen ausprobiert - egal, immer ist der Timestamp nachher 2h älter. Hat jemand eine Ahnung, woran das liegen könnte (und wieso hier eine Unterscheidung zwischen lokalen Dateien und Dateien auf Netzwerklaufwerken vorliegt)?

Vielen Dank vorab!

Gruß
Gerald
  Mit Zitat antworten Zitat