AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

GetLastWriteTime ohne Exception?

Ein Thema von a.def · begonnen am 22. Mär 2017 · letzter Beitrag vom 24. Mär 2017
Antwort Antwort
Seite 1 von 2  1 2   
a.def
(Gast)

n/a Beiträge
 
#1

GetLastWriteTime ohne Exception?

  Alt 22. Mär 2017, 23:04
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.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: GetLastWriteTime ohne Exception?

  Alt 22. Mär 2017, 23:05
Wenn du die Exception mit einem eigenen lokalen Handler catchst, sollte sie doch nicht geloggt werden, oder?
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#3

AW: GetLastWriteTime ohne Exception?

  Alt 22. Mär 2017, 23:09
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
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

AW: GetLastWriteTime ohne Exception?

  Alt 22. Mär 2017, 23:20
Wie wäre es mit function DirectoryExists(const Directory: string): Boolean; bzw. 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.

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;
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#5

AW: GetLastWriteTime ohne Exception?

  Alt 22. Mär 2017, 23:27
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.
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#6

AW: GetLastWriteTime ohne Exception?

  Alt 23. Mär 2017, 00:52
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;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

AW: GetLastWriteTime ohne Exception?

  Alt 23. Mär 2017, 01:06
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?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#8

AW: GetLastWriteTime ohne Exception?

  Alt 23. Mär 2017, 01:15
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: GetLastWriteTime ohne Exception?

  Alt 23. Mär 2017, 04:14
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (23. Mär 2017 um 04:40 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.882 Beiträge
 
Delphi 12 Athens
 
#10

AW: GetLastWriteTime ohne Exception?

  Alt 23. Mär 2017, 09:42
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

EDIT:
Ich sehe Exceptions als Fehler an, nicht als Feature zur Businesslogik.

Rollo
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 17:53 Uhr.
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