Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   GetLastWriteTime ohne Exception? (https://www.delphipraxis.net/192145-getlastwritetime-ohne-exception.html)

a.def 22. Mär 2017 22:04

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.

Zacherl 22. Mär 2017 22:05

AW: GetLastWriteTime ohne Exception?
 
Wenn du die Exception mit einem eigenen lokalen Handler catchst, sollte sie doch nicht geloggt werden, oder?

a.def 22. Mär 2017 22:09

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

nahpets 22. Mär 2017 22:20

AW: GetLastWriteTime ohne Exception?
 
Wie wäre es mit
Delphi-Quellcode:
function DirectoryExists(const Directory: string): Boolean;
bzw.
Delphi-Quellcode:
function FileExists(const FileName: string): Boolean;
Delphi-Quellcode:
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;
Demnach http://docwiki.embarcadero.com/Libra...ils.TDirectory hat TDirectory 'ne Methode Exists.

Delphi-Quellcode:
class function Exists(const Path: string; FollowLink: Boolean = True): Boolean;
Damit müsste man doch auch vorher abfragen können, ob es das zu prüfende gibt.
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;

a.def 22. Mär 2017 22:27

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.

a.def 22. Mär 2017 23:52

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;

Luckie 23. Mär 2017 00:06

AW: GetLastWriteTime ohne Exception?
 
Delphi-Quellcode:
Result := Now; // Something to return in case of error
Und wie stellst du einen Fehler fest? Bzw. woher weiß der Anwender, dass die Funktion fehlgeschlagen ist?

a.def 23. Mär 2017 00:15

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 ;)

himitsu 23. Mär 2017 03:14

AW: GetLastWriteTime ohne Exception?
 
Zitat:

Unnötige Dateizugriffe möchte ich nach Möglichkeit vermeiden ...
Wie wäre es, wenn du FindFile bzw. das TDirectory-Derivat verwendest?

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.

Rollo62 23. Mär 2017 08:42

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 11:13 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz