![]() |
DateTime of a Directory
Hallo liebe DP-Gemeinde,
wenn ich das Datum einer Datei brauchte, verwendete ich bis jetzt immer diese Funktion:
Delphi-Quellcode:
wobei myFile = "x:\dir\filename.ext" war.
{-0920-} function mz_GetFileDateTime(myFile: string): s_48;
var dt : integer; begin dt:=FileAge(myFile); try result:=FormatDateTime('dd/mm/yyyy - hh:nn:ss', FileDateToDateTime(dt)); except result:=''; end; {except} {-0920-} end; Nun habe ich aber ein Verzeichnis und so steht in myFile = "x:\dir". Die Funktion FileAge() liefert -1 zurueck und ich bekomme einen Fehler. Wie kann ich die DateTime eines Verzeichnisses bekommen? MfG, Terence |
AW: DateTime of a Directory
|
AW: DateTime of a Directory
Delphi-Quellcode:
Nur hingedaddelt, nicht getestet.
function mz_GetDirectoryDateTime(myDir : string): s_48; // Das wird wohl ein String sein(?)
var sr : TSearchRec; begin if SysUtils.FindFirst(myDir,faDirectory,sr) = 0 Then begin Result := DateTimeToStr(FileDateToDateTime(sr.Time)); end; SysUtils.FindClose(sr); end; |
AW: DateTime of a Directory
Ich habe jetzt eine Loesung die funktioniert:
Delphi-Quellcode:
hatte das Problem schon mal geloest, dachte aber, dass ich
{-0891-} function mz_GetDirDateTime(myDir: string): s_48;
var SR : TSearchRec; begin result:='00.00.0000 - 00:00:00'; {-none ending backslash in string myDir: "X:\DIR"-} if (FindFirst(myDir, faDirectory, SR) = 0) then begin try result:=FormatDateTime('dd/mm/yyyy - hh:nn:ss', FileDateToDateTime(SR.Time)); except result:='00.00.0000 - 00:00:00'; end; {except} FindClose(SR); end; {-0891-} end; mit dt:=FileAge(myFile); weiterkomme, wenn ich ein "\." an die Stringvariable myFile anhaenge, was aber nicht funktioniert. Danke fuer die vielen schnellen Antworten... @nahpets: Ist genau das, was Du vorgeschlagen hast. MfG, Terence |
AW: DateTime of a Directory
Zitat:
Welches? Erstellungs-Datum (wann die Datei auf dem Datenträger (Partition) erstellt/draufkopiert wurde. Zeitpunkt des letzten Schreibzugriffs Zeitpunkt des letzten Lesezugriffs Und bei Verzeichnissen gibt es diese Daten auch, aber was da drin steht, das hängt vom Dateisystem/DateisystemTreiber/Betriebssystemversion und den Einstellungen ab. Lesezugriff kann man bei Verzeichnissen vergessen Schreibzugriff, da wird von von NTFS gern auch der letzte Schreib-/Löschzugriff der enthaltenen Dateien übernommen, also wann sich zuletzt an den Dateien was änderte, aber das hängt davon ab, ob es ein Wechseldatenträger ist, ob der Schreibcache aktiv ist und ob es sich um einen Flash-Speicher (USB-Stick oder SSD) handelt, denn da versucht Windows die Schreibzugriffe zu minimieren und dann ist das Datum/Uhrzeit weniger genau oder wird garnicht aktualisiert. |
AW: DateTime of a Directory
GetDirTime
Delphi-Quellcode:
function GetDirTime(const Dir: string): TDateTime;
var H: Integer; F: TFileTime; S: TSystemTime; begin H := CreateFile(PChar(Dir), $0080, 0, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0); if H <> -1 then begin GetFileTime(H, @F, nil, nil); FileTimeToLocalFileTime(F, F); FileTimeToSystemTime(F, S); Result := SystemTimeToDateTime(S); CloseHandle(H); end else Result := -1; end; //ShowMessage(DateTimeToStr(GetDirTime('c:\Program Files'))); |
AW: DateTime of a Directory
Wozu FILE_FLAG_BACKUP_SEMANTICS und was ist, wenn die Rechte dafür fehlen?
Wer weiß auch aus dem Kopf, dass $0080 eigentlich FILE_READ_ATTRIBUTES darstellen soll? Oder das erste -1 ein INVALID_HANDLE_VALUE, abgesehn davon, dass typbedingt -1 falsch ist und wenn schon, es ein 4294967295 oder DWORD(-1) sein müsste, da es z.B. in Win64 eventuell Problemchen geben könnte? Fehlerbehandlung von GetFileTime ... na ja ... wenn das korrekt arbeitet, dann ist im Fehlerfall F nicht initialisiert. PS: zu meinem letzten Post ... siehe Remarks in ![]() |
AW: DateTime of a Directory
Zitat:
Terence |
AW: DateTime of a Directory
Zitat:
Du bist echt gut, Himitsu. MfG, Terence |
AW: DateTime of a Directory
Wenn man genug Fehler gemacht hat, dann kennt man die irgendwann auswendig. :lol:
Mit den "richtigen" Typen/Konstanten wird der Code leichter lesbar, verständlicher (auch ohne Kommentare an jeder Zeile) und hat auch beim Wechsel des Compilers weniger Problemchen. Und mit einer entsprechenden Fehlerbehandlung muß man später weniger Angst vor unauffindbaren Fehlern haben, die sich immer liebendgern in Programme einschleichen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:37 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