AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

{$i-} - {$iochecks off}

Ein Thema von TM6 · begonnen am 31. Mär 2025 · letzter Beitrag vom 1. Apr 2025
Antwort Antwort
TM6

Registriert seit: 14. Dez 2004
61 Beiträge
 
Delphi 12 Athens
 
#1

{$i-} - {$iochecks off}

  Alt 31. Mär 2025, 07:57
Delphi-Version: 5
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: {$i-} - {$iochecks off}

  Alt 31. Mär 2025, 10:17
{$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:
{$I+}
...
Write('blubb');
wird quasi zu
Delphi-Quellcode:
Write0UString(Output, 'blubb');
{$IFOPT I+}
if not IOTest then
  Error;
{$ENDIF}
Ich wäre fast 100% der Mienung, dass IOResult in diesem Fall nicht das Ergebnis des intern verwendeten Delphi-Referenz durchsuchenCreateDir und vor allem nicht vom MSDN-Library durchsuchenCreateDirectory wiederspiegelt.


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 '' )
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;
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.154 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: {$i-} - {$iochecks off}

  Alt 31. Mär 2025, 12:12
die uralten Pascal-Dateifunktionen aus, also jene um AssignFile.
LOL... Nicht jeder nimmt einen Stream...

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: {$i-} - {$iochecks off}

  Alt 31. Mär 2025, 12:45
TFile.WriteAll... und TFile.ReadAll... (Bytes, String-Array oder ein String)
TDirectory.Create
...
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
TM6

Registriert seit: 14. Dez 2004
61 Beiträge
 
Delphi 12 Athens
 
#5

AW: {$i-} - {$iochecks off}

  Alt Gestern, 07:20
Danke.
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:37 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