AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Probleme beim setzen des Änderungsdatums einer Datei
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme beim setzen des Änderungsdatums einer Datei

Ein Thema von gkoeder · begonnen am 30. Okt 2007 · letzter Beitrag vom 31. Okt 2007
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.553 Beiträge
 
Delphi 12 Athens
 
#1

Re: Probleme beim setzen des Änderungsdatums einer Datei

  Alt 30. Okt 2007, 15:32
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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 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