Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi IOResult stimmt nach WriteLn nicht! (https://www.delphipraxis.net/83100-ioresult-stimmt-nach-writeln-nicht.html)

Andidreas 27. Dez 2006 14:26


IOResult stimmt nach WriteLn nicht!
 
aloha...

so langsam krieg ich die krise...


in meinem programm sollen in einem txt file user daten gespeichert werden...
wenn beim hinzufügen der daten (über writeln) ein fehler passiert soll eine fehlermeldung ausgegeben werden...
soweit zur theorie...
und hier ist jetzt mal der quellcode...

Delphi-Quellcode:
function TAddPW_Form.fnAddPWtoTextFile(sPWLocation, sPassword, sUser : String) : Boolean;

var
sPath, sRow : String;
txtFile    : TextFile;

begin

  sPath := 'UserPWs\' + sUser + '_SPW.txt';  // Diese Datei Existiert nicht!
  sRow := sPWLocation + #9 + sPassword + #13;

  {$I-}
  AssignFile(txtFile, sPath);

  Append(txtFile);

  Writeln(txtFile, sRow);          //Hier müsste ein Fehler auftreten
  ShowMessage(IntToStr(IOResult));
  If IOResult <> 0 Then
  Begin
    fnAddPWtoTextFile := False;
    ShowMessage(IntToStr(IOResult));
  End
  Else
  Begin
    fnAddPWtoTextFile := True;
    ShowMessage(IntToStr(IOResult));
  End;

  CloseFile(txtFile);

  {$I+}

end;
wenn ich mir nach dem WriteLn denn IOResult ausgeben lasse ist er auf 103...
in meiner If abfrage setzt er denn wert von fnAddPWtoTextFile aber trotzdem auf True!!!
und zeigt mir in der nächsten messagebox einen IOResult = 0 an!!!

Hab ich irgendwas falsch gemacht??? meiner meinung nach müsste ich ja einen False wert in fnAddPWtoTextFile erhalten!!!
und mich wundert es ausserdem warum sich der IOResult während der IF abfrage verändert!

Luckie 27. Dez 2006 14:31

Re: IOResult stimmt nach WriteLn nicht!
 
Ähm, nur eine Idee: Wie wäe es, wenn du erst auf IOResult prüfst und wenn das in Ordnung ist in die Dati schreibst? die Variable IOREsult wird von Rewrite, Append, ... gesetzt und nicht von WriteLn.

Andidreas 27. Dez 2006 14:36

Re: IOResult stimmt nach WriteLn nicht!
 
hmm ok werd ich mal probieren...

bist du dir sicher das das auch stimmt???

weil ich hab grad nach jeder aktion die ich mit dem txt file mach denn ioresult abgefragt...

nach assign --> 0
nach append --> 2
nach writeln --> 103
nach close --> 103

aber ich probiers trotzdem ;)

Hawkeye219 27. Dez 2006 14:42

Re: IOResult stimmt nach WriteLn nicht!
 
Hi,

Zitat:

Zitat von Delphi-Hilfe
Durch den Aufruf von IOResult wird das interne Fehler-Flag gelöscht.

Du mußt also das Ergebnis des Aufrufs von IOResult speichern, dann kannst du es prüfen und bei Bedarf ausgeben.

Delphi-Quellcode:
code := IOResult;
if (code <> 0) then
  ShowMessage (IntToStr(code));
Gruß Hawkeye

Christian Seehase 27. Dez 2006 14:43

Re: IOResult stimmt nach WriteLn nicht!
 
Moin Andreas,

dass nach dem Assign kein Fehler auftritt: Logisch, denn hier wird nur intern die Dateivariable mit dem Pfad in Verbindung gebracht, und dass nach dem Append Fehler 2 auftritt ist auch logisch, da Du oben geschrieben hast, dass die Datei nicht existiert.
Fehler 2: File not found.

Mit Append kannst Du keine Dateien erzeugen.

Andidreas 27. Dez 2006 14:44

Re: IOResult stimmt nach WriteLn nicht!
 
@Hawkeye219

danke für denn beitrag ^^ der hat jetzt meine vermutung unterstützt!!!

wenn ich gleich nach writeln denn ioresult abfrage kommt die fehlermeldung die ich erwartet hab :)

danke für eure hilfe :thumb:

Luckie 27. Dez 2006 14:51

Re: IOResult stimmt nach WriteLn nicht!
 
Zitat:

Zitat von Andidreas
wenn ich gleich nach writeln denn ioresult abfrage kommt die fehlermeldung die ich erwartet hab :)

Warum erst warten bis das Kind in den Brunnen gefallen ist? Warum nicht vorher IOResult prüfen und in Abhängigkeit davon schreiben oder nicht?

Andidreas 27. Dez 2006 14:58

Re: IOResult stimmt nach WriteLn nicht!
 
es könnte ja theoretisch vorkommen das beim writeln ein fehler auftritt (ausser das die datei z.b. fehlt... weil die datei ist definitiv immer vorhanden!) von daher prüf ich writeln, wenn die datei fehlt oder ein anderer fehler auftritt meckert er aufjedenfall beim writeln...

Hansa 27. Dez 2006 15:01

Re: IOResult stimmt nach WriteLn nicht!
 
Luckie, jede I/O-Operation liefert ioresult, also auch writeln. :P

Error 103 : "Datei nicht für Schreiboperationen geöffnet"

tödlich ist so was :

Delphi-Quellcode:
reset (f);
writeln (ioresult);
immer zwischenspeichern (writeln würde ioresult von sich selber anzeigen, wahrscheinlich 0) ! Z.B. so :

Delphi-Quellcode:
reset (f);
io := ioresult
writeln (io);
Showmessage dürfte es allerdings egal sein. Rest : siehe Luckie. Der $I- Block ist IMHO auch zu groß.

P.S.: Invasion der roten Kästen ? :shock: Lasse es trotzdem mal so stehen.

Luckie 27. Dez 2006 15:11

Re: IOResult stimmt nach WriteLn nicht!
 
@Hansa: Ich hatte eben, al ich den Democode geschrieben habe, allerdings Exceptions von Writeln bekommen, weil ich die Dateivariable vergessen hatte. Das heißt, esw ird doch eine Exception in manchen Fällen ausgelöst:

Delphi-Quellcode:
var
  f: Textfile;
begin
  AssignFile(f, ChangeFileExt(ParamStr(0), '.txt'));
{I-}
  Rewrite(f);
{I+}
  if IOResult = 0 then
  begin
    try
      Writeln(f, 'Test');
    except
      on E: Exception do
        ShowMessage(E.Message);
    end;
    CloseFile(f);
  end
  else
    ShowMessage(SysErrorMessage(GetLastError));


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:05 Uhr.
Seite 1 von 2  1 2      

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