![]() |
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:
wenn ich mir nach dem WriteLn denn IOResult ausgeben lasse ist er auf 103...
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; 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! |
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.
|
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 ;) |
Re: IOResult stimmt nach WriteLn nicht!
Hi,
Zitat:
Delphi-Quellcode:
Gruß Hawkeye
code := IOResult;
if (code <> 0) then ShowMessage (IntToStr(code)); |
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. |
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: |
Re: IOResult stimmt nach WriteLn nicht!
Zitat:
|
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...
|
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:
immer zwischenspeichern (writeln würde ioresult von sich selber anzeigen, wahrscheinlich 0) ! Z.B. so :
reset (f);
writeln (ioresult);
Delphi-Quellcode:
Showmessage dürfte es allerdings egal sein. Rest : siehe Luckie. Der $I- Block ist IMHO auch zu groß.
reset (f);
io := ioresult writeln (io); P.S.: Invasion der roten Kästen ? :shock: Lasse es trotzdem mal so stehen. |
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 22:47 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