![]() |
Dateidatum auslesen liefert nur "Nullen"
Hallo,
ich hab jetzt zwei verschiedene Methoden verwendet um das Datum von Dateien aus einem Netzwerkordner auszulesen. Die Dateien sind physisch vorhanden und zeigen in den Dateieigenschaften über den Explorer auch normale Informationen an. Zur Fehlersuche verwende ich momentan folgendes:
Delphi-Quellcode:
hier die GetFileData Funktion:
u := QuotedStr( q_FileLinkTemp.FieldByName('dirlink').AsString + q_FileLinkTemp.FieldByName('filelink').AsString );
s := GetFileDate( u ); try t := DateToStr( FileDateToDateTime( FileAge( u ) ) ); except t := '0'; end;
Delphi-Quellcode:
Als Ergebnis erhalte ich eben bei beiden Methoden 0 (aus dem TryExcept) oder "0000-00-00" (aus der Funktion). Und da es sich um knapp 400.000 Dateien handelt, die nicht "auslesbar" sind, kann ich einen Einzelfall ausschließen.function Tf_main.GetFileDate(const aName:String):String; var fh :THandle; fdata :TWin32FindData; ft, wt :TFileTime; st :TSystemTime; begin { if FileExists(aName) then begin Result := FormatDateTime('yyyy-mm-dd', FileDateToDateTime(FileAge(aName))); end else begin Result := FormatDateTime('yyyy-mm-dd',MaxInt); end; } Result:=''; fh:=FindFirstFile(PChar(aName), fdata); if (fh<>Invalid_Handle_Value) then begin ft:=fdata.ftLastWriteTime; FileTimeToLocalFileTime(ft, wt); FileTimeToSystemTime(wt, st); with st do Result:=Format('%0.2d.%0.2d.%0.4d', [wDay, wMonth, wYear]); end; // If Windows.FindClose(fh); end; Danke euch! |
Re: Dateidatum auslesen liefert nur "Nullen"
Hallo,
deine Funktion GetFileDate() funktioniert bei mir, wenn ich den Fehler mit dem falsch platzierten FindClose() korrigiere - das muss in den Block rein, sonst gibt es Probleme im Fehlerfall. Hier noch eine leicht abweichende ![]()
Delphi-Quellcode:
Lektüre zu FileAge() findest du hier:
function FileModified(const fn: TFileName): TDateTime;
var sr: TSearchRec; tzi: TTimeZoneInformation; lt, st: TSystemTime; begin if FindFirst(fn, faAnyFile, sr) = 0 then begin GetTimeZoneInformation(tzi); FileTimeToSystemTime(sr.FindData.ftLastWriteTime, st); SystemTimeToTzSpecificLocalTime(@tzi, st, lt); Result := SystemTimeToDateTime(lt); FindClose(sr); end else Result := 0; end; ![]() Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 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