![]() |
GetLastWriteTime ohne Exception?
Ist es irgendwie möglich TDictionary.GetLastWriteTime oder TFile.GetLastWriteTime zu benutzen OHNE dass bei korrupten Pfad oder fehlender Datei eine Exception ausgelöst wird?
Meine Anwendung hat einen Exception-Handler welcher jede Exception loggt und wenn hier 100 Exceptions zeitgleich geloggt werden das ist ein bisschen suboptimal. |
AW: GetLastWriteTime ohne Exception?
Wenn du die Exception mit einem eigenen lokalen Handler catchst, sollte sie doch nicht geloggt werden, oder?
|
AW: GetLastWriteTime ohne Exception?
Meine Notlösung sieht jetzt so aus
Delphi-Quellcode:
function TForm8.GetLastWriteTimeEx_Dictionary(Path: string): TDateTime;
begin try Result := TDirectory.GetLastWriteTime(Path); except Result := 0; end; end; // xxx := GetLastWriteTimeEx_Dictionary('C:\irgendetwas'); // if xxx > 0 then // weiter im Programm |
AW: GetLastWriteTime ohne Exception?
Wie wäre es mit
Delphi-Quellcode:
bzw.
function DirectoryExists(const Directory: string): Boolean;
Delphi-Quellcode:
function FileExists(const FileName: string): Boolean;
Delphi-Quellcode:
Demnach
function TForm8.GetLastWriteTimeEx_Dictionary(Path: string): TDateTime;
begin if DirectoryExists(Path) then begin try Result := TDirectory.GetLastWriteTime(Path); except Result := 0; end; end else Result := 0; end; ![]()
Delphi-Quellcode:
Damit müsste man doch auch vorher abfragen können, ob es das zu prüfende gibt.
class function Exists(const Path: string; FollowLink: Boolean = True): Boolean;
Delphi-Quellcode:
function TForm8.GetLastWriteTimeEx_Dictionary(Path: string): TDateTime;
begin if TDirectory.Exists(Path, False) then begin try Result := TDirectory.GetLastWriteTime(Path); except Result := 0; end; end else Result := 0; end; |
AW: GetLastWriteTime ohne Exception?
Unnötige Dateizugriffe möchte ich nach Möglichkeit vermeiden aber ich werde es definitiv testen!
Ok Test nach nur einer Minute erledigt und es hat keine Performance-einbußen mit sich gebracht wie ich vorher hatte. |
AW: GetLastWriteTime ohne Exception?
Mein Endergebnis sieht jetzt übrigens so aus. Ich habe auf JclFileUtils gewechselt, da die ein wenig schneller sind
Delphi-Quellcode:
function FileTimeToDateTime(FileTime: TFileTime): TDateTime;
var ModifiedTime: TFileTime; SystemTime: TSystemTime; begin Result := 0; if (FileTime.dwLowDateTime = 0) and (FileTime.dwHighDateTime = 0) then Exit; try FileTimeToLocalFileTime(FileTime, ModifiedTime); FileTimeToSystemTime(ModifiedTime, SystemTime); Result := SystemTimeToDateTime(SystemTime); except Result := Now; // Something to return in case of error end; end; function TForm8.getPathLastWriteTime(const aPathName: string): TDateTime; begin try Result := FileTimeToDateTime(JclFileUtils.GetFileLastWrite(aPathName)); // TDirectory.GetLastWriteTime(aPathName); except Result := 0; end; end; function TForm8.getFileLastWriteTime(const aFileName: string): TDateTime; begin Result := functions.getPathLastWriteTime(aFileName); end; |
AW: GetLastWriteTime ohne Exception?
Delphi-Quellcode:
Und wie stellst du einen Fehler fest? Bzw. woher weiß der Anwender, dass die Funktion fehlgeschlagen ist?
Result := Now; // Something to return in case of error
|
AW: GetLastWriteTime ohne Exception?
Das ist in meinem Fall total unwichtig denn wenn da wo das Ergebnis angezeigt werden soll einfach nichts angezeigt (ich habe 0 draus gemacht) wird ist das absolut nicht schlimm.
Ich baue hier keine professionelle Software die 5000€ kostet ;) |
AW: GetLastWriteTime ohne Exception?
Zitat:
Das wäre dann ja ein Exists und GetLastWriteTime in nur einem Zugriff. PS: Dass diese Zeit heutzutage eventuell keinen sinnvollen Wert besitzt, ist aber bekannt? Vorallem bei Speicherkarten, USB-Sticks, SSDs und Co. wird das im NTFS gern mal deaktiviert und gibt somit nicht das letzte Änderungsdatum der enthaltenen Dateien wieder. |
AW: GetLastWriteTime ohne Exception?
Ich frage IMMER FileExist/DirectoryExist vorher ab, bevor ich auf etwas zugreife.
Weil zu oft dort Fehler passieren. Jetzt könnte man sagen lass es immer in die Exception Laufen, und gut is, aber da bin ich eher konservativ. Was würde denn die moderne Entwicklung empfehlen, eher lokale Excaptions mit Overhead, oder FileExists mit Overhead ? Ich vermute mal das die lokale Exceptions Methode jetzt State-of-the-Art ist :stupid: EDIT: Ich sehe Exceptions als Fehler an, nicht als Feature zur Businesslogik. Rollo |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:26 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