Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Fehlerbehandlung - Fehler nicht anzeigen (https://www.delphipraxis.net/207793-fehlerbehandlung-fehler-nicht-anzeigen.html)

FediDelPr 4. Mai 2021 00:09

Delphi-Version: 2010

Fehlerbehandlung - Fehler nicht anzeigen
 
In meinem Programm das Files in Windows scannt müssen gelockte Files
übersprungen werden, ohne dass das Programm stoppt. Allenfalls sollen die
gelockten Files gezählt werden.

Zurzeit stoppt das Programm jeweils mit der Meldung 'Filexxx is locked'
was unerwünscht ist.
Das Verhalten findet im Non-Debug Mode statt.

Ich verwende folgenden Code:

Code:
TRY
  fs := TFileStream.Create(fName, fmOpenRead OR fmShareDenyNone);
EXCEPT
  ON EFOpenError DO
    BEGIN
      (* .. zB Locked Files zaehlen *)
    END;
Hat jemand eine Idee wie ich die Meldung unterdrücke ?

KodeZwerg 4. Mai 2021 01:05

AW: Fehlerbehandlung - Fehler nicht anzeigen
 
Was bedeutet "locked" in Deiner Situation?
Was soll es denn "scannen"?

Ein wenig mehr Informationen bitte.

Aus dem Bauch heraus:
Delphi-Quellcode:
TRY
  fs := TFileStream.Create(fName, fmOpenRead OR fmShareDenyNone);
EXCEPT
//  ON EFOpenError DO
    BEGIN
      (* .. zB Locked Files zaehlen *)
    END;

jaenicke 4. Mai 2021 05:42

AW: Fehlerbehandlung - Fehler nicht anzeigen
 
Ich vermute einmal du suchst SetErrorMode:
https://docs.microsoft.com/en-us/win...i-seterrormode

Standardmäßig leitet Windows kritische Fehler nicht an die aufrufende Anwendung weiter, sondern zeigt stattdessen einen Fehlerdialog an. Das kannst du damit ändern.

himitsu 4. Mai 2021 06:55

AW: Fehlerbehandlung - Fehler nicht anzeigen
 
Ja, auch die Standardeinstellung von SetErrorMode in Delphi (RTL) ist auch so ausgelegt, dass nichts angezeigt wird. (Ausnahme gibt es bei einigen uralten grottigen Treibern für z.B. Hardware/Netzwerkkarten)
Es gibt aber einige Fremdkomponenten, welche (fast böswillig) global den Modus ändern. (nachschauen, falls du Welche verwendest und über einen Austausch nachdenken)

Und ja, normalerweise löst diese API (Bei Google suchenCreateFile) keine Anzeige einer Fehlermeldung aus.
Delphi wertet nur den Rückgabewert (Bei Google suchenGetLastError) aus und erstellt daraus eine Delphi-Exception (Delphi-Referenz durchsuchenSysErrorMessage), welche sich dann mit EXCEPT abfangen lässt (so lange man es dann nicht mit RAISE weiterleitet).



Im Debugger würde zwar angehalten (so lange man diese Exception nicht ignorieren lässt), aber das ist dann eine Meldung vom Debugger und nicht aus dem Programm.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:55 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