![]() |
Wieder E/A-Fehler...aber ich finde ihn nicht
Hallo Leute,
sollte eigentlich recht einfach sein, aber scheinbar doch nicht:
Delphi-Quellcode:
Es bricht sofort nach dem Drücken ab, mit Fehlermeldung E/A 103, obwohl ich einen Abfangzweig mit Message eingebaut habe, wird es ignoriert... was kann das sein? Bin extremst ratlos, weil im Forum ja alle Beispiele ähnlich sind..
procedure TForm1.btn_ladeClick(Sender: TObject);
var daten1: array[1..100] of string; s: string [64]; datei: textfile; begin AssignFile(datei,'e:\aaa.txt'); Reset(datei); if IOResult <> 0 then begin // Fehler beim Öffnen Rewrite(datei); // Erzeuge Datei if IOResult <> 0 then begin ShowMessage('Datei konnte nicht angelegt werden'); exit; end; end; for y:=1 to 100 do begin daten1[y]:=inttostr(y); //Fülle das Array einfach sinnlos mit einem String s:= daten1[y]; // Sicher ist sicher, ein einfacher Pufferstring nimmt den Array-String auf writeln(datei,s); // Hier steigt er aus end; closefile(datei); end; |
Re: Wieder E/A-Fehler...aber ich finde ihn nicht
Hallo Kasch,
du öffnest eine Datei mit Reset zum Lesen und möchtest etwas hineinschreiben? Das kann nicht funktionieren. Gruß Hawkeye |
Re: Wieder E/A-Fehler...aber ich finde ihn nicht
dafür war eigentlich die nachfolgende IO-result-anweisung gedacht...
aber selbst wenn ich reset durch rewrite ersetze, klappt es nicht. Oder ist rewrite nicht der richtige Befehl? |
Re: Wieder E/A-Fehler...aber ich finde ihn nicht
Hi!
Bis zu welcher Stelle kommst du denn beim Ausführen? Ciao Frederic |
Re: Wieder E/A-Fehler...aber ich finde ihn nicht
Delphi-Quellcode:
das steht zumindest der Cursor nach dem Abbruch
writeln(datei,s); // Hier steigt er aus
|
Re: Wieder E/A-Fehler...aber ich finde ihn nicht
Handelt es sich um eine TextFile?
|
Re: Wieder E/A-Fehler...aber ich finde ihn nicht
Delphi-Quellcode:
wenn du das meinst ja - oder was meinst du? Habe 'datei' als textfile deklariert.
datei: textfile;
So wie ich es eigentlich hier an einigen Beispielen gesehen habe. |
Re: Wieder E/A-Fehler...aber ich finde ihn nicht
Was kommt denn für ein Fehler E/A 105 ...?
Mach doch mal
Delphi-Quellcode:
{$I-}
reset(f); {$I+} ... |
Re: Wieder E/A-Fehler...aber ich finde ihn nicht
habe ich gerade probiert,allerdings mit rewrite *g
geht auch nicht...Fehlercode 103....und immer beim writeln bleibt erhängen.. achso, Festplatte hat noch Platz, habe ich auch schon überprüft edit: habe bissel probiert
Delphi-Quellcode:
kommt E/A 1005
{$I-}
reset(f); {$I+} ...
Delphi-Quellcode:
kommt E/A 103
{$I-}
rewrite(f); {$I+} ... Was ist das nur? |
Re: Wieder E/A-Fehler...aber ich finde ihn nicht
Also bei mir geht der Code (mit der Erweiterung von Matti) ohne Probleme.
|
Re: Wieder E/A-Fehler...aber ich finde ihn nicht
Zitat:
setz doch mal den Vorschlag von turboPASCAL um. Wenn du mit IOResult und nicht mit Exception arbeitest, muss der Compilerschalter {$I-} gesetzt werden. Dann solltest du evtll. mal den FileMode prüfen:
Delphi-Quellcode:
und wenn es dann noch nicht geht, hast du vielleicht keine Schreibrechte auf E?
if FileMode <> fmOpenReadWrite then
MessageDlg('Achtung, FileMode setzen', mtWarning, [mbOK], 0); Cu, Frank [EDIT] Und evtll. statt Reset mal System.Reset - manchmal werden in anderen Units gleichlautende Funktionen definiert... |
Re: Wieder E/A-Fehler...aber ich finde ihn nicht
Was der Fehler ist ist:
Zitat:
Zitat:
|
Re: Wieder E/A-Fehler...aber ich finde ihn nicht
Aslo zur Erleuterung:
Delphi-Quellcode:
var
f: TextFile; daten1: array[1..100] of string; s: string; i, err: Integer; function ShowEAErrors(Error: Integer): string; begin case Error of 100: Result := 'Fehler beim Lesen vom Datenträger'; 101: Result := 'Fehler beim Schreiben auf Datenträger'; 102: Result := 'Dateivariable ist keiner Datei zugewiesen'; 103: Result := 'Datei nicht geöffnet'; 104: Result := 'Datei wurde nicht für Leseoperationen geöffnet'; 105: Result := 'Datei wurde nicht für Schreiboperationen geöffnet'; 106: Result := 'Ungültiges numerisches Format'; else Result := 'Nicht dokumentierter Fehler'; end; end; procedure SaveFile; begin err := 0; AssignFile(f, 'c:\aaa.txt'); {$I-} Rewrite(f); // Erzeuge Datei neu ! {$I+} err := IOResult; if err = 0 then // Wenn kein Fehler vorhanden dann Daten schreiben begin for i:=1 to 100 do begin daten1[i] := inttostr(i); //Fülle das Array einfach sinnlos mit einem String {$I-} writeln(f, daten1[i]); // Daten schreiben {$I+} err := IOResult; if err <> 0 then begin ShowMessage(ShowEAErrors(err)); break; end; end; end else ShowMessage(ShowEAErrors(err)); CloseFile(f); end; procedure OpenFile; begin err := 0; AssignFile(f, 'c:\aaa.txt'); {$I-} Reset(f); // Datei nur zum lesen öffnen ! {$I+} err := IOResult; if err = 0 then // Wenn kein Fehler vorhanden dann Daten schreiben begin for i:=1 to 100 do readln(f, daten1[i]); // Daten in Array lesen end else ShowMessage(ShowEAErrors(err)); CloseFile(f); end; procedure AppendFile; begin err := 0; AssignFile(f, 'c:\aaa.txt'); {$I-} Append(f); // Datei zum anhängen von Daten öffnen //(geht nur wenn Datei vorhanden) {$I+} err := IOResult; if err = 0 then // Wenn kein Fehler vorhanden dann Daten anhängen begin for i:=1 to 100 do begin daten1[i] := ... Writeln(f, daten1[i]); // Daten an vorh. Daten anhängen / schreiben end; end else ShowMessage(ShowEAErrors(err)); CloseFile(f); end; |
Re: Wieder E/A-Fehler...aber ich finde ihn nicht
Aslo heisst das in Deinem Fall dass das dann so aus sehen sollte:
Delphi-Quellcode:
// Edit: PS.: Ist das jetzt ein Tut ? :mrgreen:
var
f: Textfile; daten1: array[1..100] of string; s: string; i, err: Integer; function ShowEAErrors(Error: Integer): string; begin case Error of 100: Result := 'Fehler beim Lesen vom Datenträger'; 101: Result := 'Fehler beim Schreiben auf Datenträger'; 102: Result := 'Dateivariable ist keiner Datei zugewiesen'; 103: Result := 'Datei nicht geöffnet'; 104: Result := 'Datei wurde nicht für Leseoperationen geöffnet'; 105: Result := 'Datei wurde nicht für Schreiboperationen geöffnet'; 106: Result := 'Ungültiges numerisches Format'; else Result := 'Nicht dokumentierter Fehler'; end; end; procedure So_und_so; begin err := 0; // braucht man eigentlich nich machen // da IOresult den Wert setzt... AssignFile(f, 'c:\aaa.txt'); {$I-} Append(f); // Öffne Datei zum anhangen von Text {$I+} err := IOResult; if err <> 0 then // Wenn keine Datei da dann neu erstellen begin {$I-} Rewrite(f); // Erstelle Datei neu (Schreibrechte) {$I+} err := IOResult; end; if err = 0 then // Keine Fehler ? dann los begin for i:=1 to 100 do begin daten1[i] := inttostr(i); //Fülle das Array einfach sinnlos mit einem String writeln(f, daten1[i]); // Daten schreiben end; end else // Fehler !? Was für einer ? ShowMessage(ShowEAErrors(err)); CloseFile(f); // Datei schliessen end; |
Re: Wieder E/A-Fehler...aber ich finde ihn nicht
also Schreibrechte habe ich, Datei wird ja erstellt. Es steht auch eine '1' drin, also wird die Schleife einmal durchlaufen und dann bricht er ab.
den Vorschlag von turbopascal habe ich durchgeführt. entweder 103(reset) oder 105(rewrite). siehe weiter oben mein edit. Bin etwas ratlos, denn normalerweise müßte es ja auch gehen und langsam habe ich auch die Faxen dicke. Kann doch nicht sein, daß es da Fehlermeldung gibt wenn es nicht sein kann! Die Beispiele im Forum gehen ja schließlich auch. Und irgendwie ist es ja wohl total unlogisch, daß die Datei erstellt wird, geöffnet und nur einmal beschrieben wird. Der Virenscanner schlägt auch nicht an und auf der Festplatte sind 1GB frei. Wer hat Vorschläge, wie ich es machen könnte? -Datei erstellen -Öffnen zum beschreiben/überschreiben -in einer Schleife Strings schreiben - Datei schließen Vielen Dank schon mal. |
Re: Wieder E/A-Fehler...aber ich finde ihn nicht
mit append wird die datei ebenfalls geöffnet und um eine '1' erweitert- also wird die schreibsequenz wieder einmal ausgeführt und dann abgebrochen. Ich formartiere das hier gleich neu.....
Also, Datei wird eröffnet und einmal beschrieben - was nun? |
Re: Wieder E/A-Fehler...aber ich finde ihn nicht
Was willst denn Du überhaubt machen ?
|
Re: Wieder E/A-Fehler...aber ich finde ihn nicht
Habe ich doch geschrieben und dürfte doch auch aus meinem Quelltext erkenntlich sein...
-Datei erstellen -Öffnen zum beschreiben/überschreiben -in einer Schleife Strings schreiben - Datei schließen |
Re: Wieder E/A-Fehler...aber ich finde ihn nicht
Hab ich doch alles beschrieben, Reset öffnet nur zum lesen, rewrite öffnet zum erstellen und überschreiben un append fügt Text an.
Anders geht es mit Writeln/Readeln nicht in Textdateien. |
Re: Wieder E/A-Fehler...aber ich finde ihn nicht
irgendwie habe ich den Eindruck, hier liest keiner was ich schreibe.
"mit append wird die datei ebenfalls geöffnet und um eine '1' erweitert- also wird die schreibsequenz wieder einmal ausgeführt und dann abgebrochen. Ich formartiere das hier gleich neu..... Also, Datei wird eröffnet und einmal beschrieben - was nun? " also klappt das Erstellen, Öffnen und Beschreiben. Nur nach einem Schreibvorgang kommt die Fehlermeldung und das Programm bricht ab. An was kann das Liegen? |
Re: Wieder E/A-Fehler...aber ich finde ihn nicht
Dann zeig doch bitte mal den akt. Code.
|
Re: Wieder E/A-Fehler...aber ich finde ihn nicht
hat sich zum anfangspost nicht geändert
Delphi-Quellcode:
procedure TForm1.btn_ladeClick(Sender: TObject);
var daten1: array[1..100] of string; s: string [64]; datei: textfile; begin AssignFile(datei,'e:\aaa.txt'); Reset(datei); for y:=1 to 100 do begin daten1[y]:=inttostr(y); //Fülle das Array einfach sinnlos mit einem String s:= daten1[y]; // Sicher ist sicher, ein einfacher Pufferstring nimmt den Array-String auf writeln(datei,s); // Hier steigt er nach einem Durchlauf aus end; closefile(datei); end; |
Re: Wieder E/A-Fehler...aber ich finde ihn nicht
Zitat:
Zitat:
Post #14, #13, #12 ? :gruebel: |
Re: Wieder E/A-Fehler...aber ich finde ihn nicht
fehler gefunden,
in dem wust hatte sich doch tatsache closefile(datei) noch in die schleife reingeschmuggelt. viel Lärm um nichts und die Erkenntnis, nächstes mal den Quellcode besser zu ordnen. Vielen Dank an alle. |
Re: Wieder E/A-Fehler...aber ich finde ihn nicht
Du hast dafür aber die Antworten nicht gelesen. denn beim ersten mals klappt es, weil die datei nicht existiert. beim 2. Durchlauf existiert diese und wird ja mit reset geöffnet ( nur zum Lesen) und dann wird versucht zu Schreiben.!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:18 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