Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi IOResult funktioniert nicht korrekt (https://www.delphipraxis.net/40050-ioresult-funktioniert-nicht-korrekt.html)

wespi 10. Feb 2005 12:49


IOResult funktioniert nicht korrekt
 
Hallo,
ich bin von BP7 auf Delhi7 umgestiegen und versuche nun meine pas-files aus BP7-Zeiten unter Delphi zum Laufen zu kriegen.
Nun steh ich vor einem Fehler, der mich stark nervt :

1 {$I-}
2 assign(f,'fehler.rec');
3 reset(f);
4 ioerror := (IOResult = 0);

Die Datei fehler.rec existiert nicht.
Im Debug-Fenster überwachte Ausdrücke wird nach Abarbeiten von reset(f) IOResult mit Wert 2 angezeigt,
wie sich das bei nicht existierender Datei auch gehört, in ioerror steht jedoch nach Abarbeiten von Zeile 4 der Wert 0, statt 2.

Unter BP7 hat die source einwandfrei funktioniert;

Hat jemand 'ne Lösung ?????

Besten Dank für Eure Hilfe

alcaeus 10. Feb 2005 13:19

Re: IOResult funktioniert nicht korrekt
 
Hallo wespi,

IOResult hat einen Wert <> 0 falls ein Fehler aufgetreten ist. Deshalb müsste (logischerweise) die Zuweisung so lauten:
Delphi-Quellcode:
ioerror := IOResult <> 0;
Ist ioerror nun true, so ist ein Fehler aufgetreten.

Greetz
alcaeus

eddy 10. Feb 2005 13:22

Re: IOResult funktioniert nicht korrekt
 
Hallo wespi,

Deine 4. Programmzeile paßt nicht zu Deiner Erklärung.

ioerror := (IOResult = 0);

liefert entweder wahr oder falsch, dh. ioerror : Boolean;

Sollte Dein ioerror : Integer sein, mußt Du Deine 4. Zeile wandeln in:
Delphi-Quellcode:
  ioerror := IOResult;
  //Auswertungen dann mit:
  if ioerror <> 0 then begin
    //...
  end;
mfg
eddy

Luckie 10. Feb 2005 14:10

Re: IOResult funktioniert nicht korrekt
 
Zitat:

Zitat von wespi
in ioerror steht jedoch nach Abarbeiten von Zeile 4 der Wert 0, statt 2.

ioerror ist laut Zeile vier vom Datentyp Boolean. Wie läßt du dir da einen Integerwert ausgeben? Der Delphi sollte im Debugger True oder False anzeigen. Wobei False gleich null ist und alles andere True entspricht. Ergo stimmt das Ergebnis, was IOResult liefert.

wespi 10. Feb 2005 14:50

Re: IOResult funktioniert nicht korrekt
 
Hallo,
Entschuldigung, ich habe meinen Quelltext falsch wiedergegeben.
IoError ist ein Integer, der Compiler hätte das natürlich sofort angemeckert.

Zeile 4 heisst natürlich : IoError := IoResult;

Was jedoch nichts an der Tatsache ändert, dass nach Abarbeiten von Zeile 3 (reset) das Debugfenster zwar IoResult mit dem Wert 2 (fehlende Datei) meldet, dieser Wert jedoch nach Abarbeiten von Zeile 4 nicht in IoError steht, sondern der Wert 0.

also nochmals 'Tschuldigung, ich hoffe, dass mir trotzdem noch jemand weiterhilft

mfg

wespi

Luckie 10. Feb 2005 14:52

Re: IOResult funktioniert nicht korrekt
 
Wird IOError denn noch mal verwendet? Lass in dir mal mit ShowMessage ausgeben.

wespi 10. Feb 2005 15:36

Re: IOResult funktioniert nicht korrekt
 
Hallo,

nachdem ich Delphi-Neuling bin, musste ich erst mal nachsehen, wie Showmessage funktioniert.
Habe Showmessage jetzt so aufgerufen, ist es das , was Du meinst? :


3 reset(f);
4 Ioerror := ioresult;
5 showmessage(intToStr(ioerror));

Ergebnis ist ein kleines Meldungsfenster mit dem Wert 0.
Das habe ich auch nicht anders erwartet, denn ich sehe das ja auch im Überwachungsfenster des Debuggers, dass IoError den Wert 0 hat. Ich habe auch schon nachgesehen, ob ich IoError womöglich nochmal irgendwo deklariert habe, aber es existiert nur 1 mal und ist in der gleichen Unit deklariert, wo auch der Code steht. (var IoError : integer;)

Wenn ich den Debugger mit F7 in die System-Unit-Funktion Ioresult laufen lasse, wird schon auf dem "begin" im Überwachungs-Fenster des Debuggers der Wert 2 auf Wert 0 gesetzt. Ich hätte das erst nach der Zeile "result := InOutRes;" erwartet, weil ja lt. Definition IoResult nach!! Aufruf der Funktion zurückgesetzt werden soll.

Delphi-Quellcode:
function IOResult: Integer;  // in der Unit System
begin
  Result := InOutRes;
  InOutRes := 0;
end;
also, ich begreif's nicht

mfg wespi

[edit=Luckie]Benutz bitte das nächste mal Delphi-Tags. Danke. Mfg, Luckie[/edit]

NicoDE 10. Feb 2005 15:48

Re: IOResult funktioniert nicht korrekt
 
Vielleicht rufst Du nicht die erwarteten Funktionen auf... (wer weiss, denn der obige Code funktioniert erwartungsgemäß).
Schreib zur Sicherheit / zum Testen den Namensraum (Unitname) vor die Variablen und Funktionen:
Delphi-Quellcode:
{$I-}
  System.AssignFile(F, '?invalid?');
  System.Reset(F);
  IoError := System.IOResult;
{$I+}

wespi 10. Feb 2005 16:05

Re: IOResult funktioniert nicht korrekt
 
Hab's gerade probiert :

system.assignFile(f,'fehler.rec');
system.reset(f);
Ioerror := system.ioresult;
showmessage(intToStr(ioerror));


----> das gleiche Ergebnis.

Und das auf zwei unterschiedlichen PC's mit unterschiedlichen OS (WinXP und Win2000) und mit Delphi 5 und Delphi 7.
Immer die gleiche Sch....

wenn das so weitergeht, mach ich wieder Turbo-Pascal !!! , da funktionierts problemlos


mfg wespi

schöni 10. Feb 2005 16:19

Re: IOResult funktioniert nicht korrekt
 
Hallo wespi!

Hab grad bissl gestöbert und Deinen Beitrag gefunden und ein kleines Testprogramm geschrieben.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var F: file; IoError: Integer;
begin
{$I-}
  System.AssignFile(F, '?invalid?');
  System.Reset(F);
  IoError := System.IOResult;
{$I+}
  ShowMessage('Fehlernummer: ' + IntToStr(IoError));
end;
In Delphi: Meuü: Datei->Neu->Anewndung (Delphi3 -> Datei->Neue Anwendung)

DoppelClick auf Form1 -> FormCreate-Methode wird erzeugt. Dort schreibst Du obigen Text rein. Nicht vergessen: var F: File; IOERror: Integer; Sonst beschwert sich der Compiler.

Viel Erfolg

schöni


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:03 Uhr.
Seite 1 von 3  1 23      

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