hab hier keine JCL installiert, aber da GetFileLastWrite die Zeit als TFileTime ausgibt und SetFileLastWrite diese als TDateTime entgegennimmt, vermute ich mal das die Intern noch einiges machen ... müßte mal wer nachsehn, ob die JCL da nicht was an der Zeit manipuliert.
versuch es mal direkt mit der
WinAPI:
Delphi-Quellcode:
var
LineCounter: Integer;
CurrentFile: String;
FileHandle: THandle;
OldFileTime: tFileTime;
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) then
Begin
// Aktuelles Änderungsdatum der Datei erfassen
FileHandle := CreateFile(PChar(CurrentFile), GENERIC_READ,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, nil);
GetFileTime(FileHandle, nil, nil, OldFileTime);
CloseHandle(FileHandle);
// Änderung an den Dateieigenschaften vornehmen
If not SetFileSummaryInfo(CurrentFile, FMTID_DocSummaryInformation, PIDDSI_CATEGORY, GetCategoryType) Then
Memo_Log.Lines.Add('Setzen der Kategorie fehlgeschlagen: ' + CurrentFile);
// Änderungsdatum wieder in Datei zurückschreiben (UTC-Format)
FileHandle := CreateFile(PChar(CurrentFile), GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, nil);
SetFileTime(FileHandle, nil, nil, OldFileTime);
CloseHandle(FileHandle);
end else
Begin
Memo_Log.Lines.Add('Datei nicht gefunden: ' + CurrentFile);
end;
end;
PS: dieses =true und =false ... wäre besser, wenn du dir solche Vergleiche abgewöhnst
(gibt dazu einige Threads im Forum, warum sowas Probleme beeiten könnte)
und dann hab ich das =false erst übersehn und hab mich grad gewundert warum die Fehlermeldung "Setzen der Kategorie fehlgeschlagen" bei 'nem "positivem"Ergebnis ausgelöst wird. (if not xyz = wenn nicht xy ... versteht sich och leichter ^^)
theoretisch sollte sich die Zeit nicht ändern, denn selbst wenn die Zeit in 'ner falschen Zeitzone ausgelesen wird, wird dieses beim Schreiben in der falschen Zeitzohne wieder behoben, denn:
SetFileTime und GetFileTime lesen unter NTFS die Zeit in der lokale Zeit aus,
wobei diese Zeit auf der Platte in UTC gespichert ist und bei Auslsen umgewandelt wird
beim Schreiben dann genau andersrum, also die übergebene Zeit wird von Lokal nach UTC umgewandelt und gespeichert.
unter FAT wird diese Umwandlung zwar auch gemacht (microsoft hat leider keine Extra Funktion dafür bereit gestellt, oder mal neue FAT-Treiber), allerdings wird dort die Zeit in LocalTime gespeichert.
(weßhalb auch zur Zeitumstellung sich die Zeiten z.B. auf USB-Sticks ändern)
so, aber jetzt warum es eigentlich egal ist:
die Zeitzone wird zwar beim Auslesen geändert, aber beim Schreiben wird diese Änderung rückgängig gemacht und da hier die Zeit in der Vaiable gleich bleibt, sollte somit die Originalzeit wiederhergestellt werden.
ebenso sollte es beim LAN sein, denn egal wie die Zeit da drüben ist, sie wird von da ausgelesen und auch wieder dahin zurückgeschrieben.
es könnte natürlich auch sein, daß die nötigen Treiber für den Zugriff über's LAN was ändern,
also falls GetFileLastWrite und SetFileLastWrite nüschts "falsch" machen.