Ich habe eine Verständnisfrage.
Ich bin immer davon ausgegangen, dass es bei der Verwendung von {$I-} keine
Exception geben würde, da diese von Delphi abgefangen wird und ich den Fehlercode über IOResult erhalte.
Ich sichere MeinString <> '' vorher ab (Delphi-Hilfe von
ForceDirectories) und es gibt in bestimmten Fällen trotzdem eine IO-
Exception.
Code:
exception class : EInOutError
exception message : Verzeichnis kann nicht erstellt werden.
Delphi-Quellcode:
if MeinString = '' then exit;
{$I-}SysUtils.ForceDirectories( MeinString );{$I+}
error := IOResult;
if ( error = 0 )
then ...
else ...
Ist trotz {$I-} immer ein try .. except notwendig, und {$I-} ist nur eine Erleichterung, den Fehlercode auszuwerten?
Das ist aber in der Hilfe anders formuliert bzw. interpretiere ich das anders:
Zitat:
Anmerkungen
Mit der Direktive $I wird die automatische Code-Generierung aktiviert bzw. deaktiviert, die nach jedem Aufruf einer E/A-Prozedur das Ergebnis überprüft. Eine ausführliche Beschreibung der E/A-Prozeduren finden Sie in der Delphi-Sprachreferenz. Wenn eine E/A-Prozedur bei aktivierter Option ein Ergebnis ungleich 0 zurückgibt, führt dies zu einer EInOutError-
Exception (bzw. zum Programmabbruch, wenn die
Exception-Behandlung nicht aktiviert ist). Ist die Option deaktiviert, muss die E/A-Operation durch einen Aufruf von IOResult auf Fehler geprüft werden.
Das Problem tauchte bei mir auf, als ich auf einen Ordner in den eigenen Dateien zugreifen wollte
Code:
SysUtils.ForceDirectories( TPath.GetDocumentsPath + '\MeinUnterordner' )
und die Windows-
API einen leeren String zurücklieferte.
Siehe dazu meine Frage in
https://www.delphipraxis.net/216958-...e-dateien.html