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