![]() |
Delphi-Version: 5
{$i-} - {$iochecks off}
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:
Ist trotz {$I-} immer ein try .. except notwendig, und {$I-} ist nur eine Erleichterung, den Fehlercode auszuwerten?
if MeinString = '' then exit;
{$I-}SysUtils.ForceDirectories( MeinString );{$I+} error := IOResult; if ( error = 0 ) then ... else ... Das ist aber in der Hilfe anders formuliert bzw. interpretiere ich das anders: Zitat:
Code:
und die Windows-API einen leeren String zurücklieferte.
SysUtils.ForceDirectories( TPath.GetDocumentsPath + '\MeinUnterordner' )
Siehe dazu meine Frage in ![]() |
AW: {$i-} - {$iochecks off}
{$IOChecks} schaltet optionalen Prüfcode für die uralten Pascal-Dateifunktionen aus, also jene um AssignFile.
AssignFile/Append/Reset/Rewrite/Read/ReadLn/Write/WriteLn/Close/...
Delphi-Quellcode:
wird quasi zu
{$I+}
... Write('blubb');
Delphi-Quellcode:
Ich wäre fast 100% der Mienung, dass IOResult in diesem Fall nicht das Ergebnis des intern verwendeten
Write0UString(Output, 'blubb');
{$IFOPT I+} if not IOTest then Error; {$ENDIF} ![]() ![]() Wer sich den Quellcode von ForceDirectories ansieht, wird feststellen, dass dort keine dieser alten API verwendet wird, bei Eingabe-Fehlern explizit eine Exception ausgelößt wird (ja, genau dieses
Delphi-Quellcode:
)
''
und sonst jemand dringend den Rückgabewert dieser Funktion prüfen sollte.
Delphi-Quellcode:
if not SysUtils.ForceDirectories( MeinString) then
RaiseLastOSError;
Delphi-Quellcode:
if not SysUtils.ForceDirectories( MeinString) then begin
TheError := GetLastError; ... end; |
AW: {$i-} - {$iochecks off}
Zitat:
Mavarik :coder: |
AW: {$i-} - {$iochecks off}
TFile.WriteAll... und TFile.ReadAll... (Bytes, String-Array oder ein String)
TDirectory.Create ... |
AW: {$i-} - {$iochecks off}
Danke.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:41 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