AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Dateien erstellen, schreiben, Lesen (E/A-Fehler 32 & 103)

Dateien erstellen, schreiben, Lesen (E/A-Fehler 32 & 103)

Ein Thema von Bounser · begonnen am 6. Mai 2008 · letzter Beitrag vom 8. Mai 2008
Antwort Antwort
Seite 1 von 2  1 2   
Bounser
(Gast)

n/a Beiträge
 
#1

Dateien erstellen, schreiben, Lesen (E/A-Fehler 32 & 103

  Alt 6. Mai 2008, 21:39
Hallo ersteinmal.
Ich hoffe das ich hier im richtigen Bereich bin. Ich hab schon alles versucht, aber irgendwie finde ich den Fehler nicht:

Also ich möchte eine Datei bearbeiten:
Delphi-Quellcode:
var
  textf: TextFile;

procedure textOpen(Datei: string);
begin
  AssignFile(textf,Datei);
  Rewrite(textf); // an dieser Stelle gibt er E/A-Fehler 32 aus
end;

procedure TForm1.einfacherRechner1Click(Sender: TObject);
begin
        try
        textOpen('Einstellungen.txt');
        WriteLn(textf, '0');
        finally
        CloseFile(textf);
        end;
end;

procedure TForm1.wissenschaftlicherRechner1Click(Sender: TObject);
begin
        try
        textOpen('Einstellungen.txt');
        WriteLn(textf, '1');
        finally
        CloseFile(textf);// an dieser Stelle gibt er E/A-Fehler 103 aus
        end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var settings: String;
begin
  try
  AssignFile(textf,'Einstellungen.txt');
  Reset(textf);
  Readln(textf,settings);
  case Strtoint(settings) of
    0: einfacherRechner1Click(Sender);
    1: wissenschaftlicherRechner1Click(Sender)
  else
        close;
  end;
  finally
  CloseFile(textf);// an dieser Stelle gibt er E/A-Fehler 103 aus
  end;
Woran kann das liegen ? Ich weiß wirklich nicht. E/A-Fehler heißt doch, dass die Datei nicht geöffnet wird, aber wird das nicht mit Rewrite() ?
Ich hoffe ihr könnt mir helfen. Vielen Dank schonmal für die Antworten:
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.769 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Dateien erstellen, schreiben, Lesen (E/A-Fehler 32 &

  Alt 6. Mai 2008, 21:53
IO Error 32 -> bedeutet eine sharing violation
IO Error 103 -> bedeutet file not open

Ich vermute das File ist noch read only geöffnet.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var settings: String;
begin
  try
  AssignFile(textf,'Einstellungen.txt');
  Reset(textf); // File readonly geöffnet
  Readln(textf,settings);
  case Strtoint(settings) of
    0: einfacherRechner1Click(Sender); // hier wird versucht in das File etwas zu schreiben
    1: wissenschaftlicherRechner1Click(Sender) // hier auch.
  else
        close;
  end;
  finally
  CloseFile(textf);// an dieser Stelle gibt er E/A-Fehler 103 aus
  end;
Du solltest an dem Design etwas ändern.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Bounser
(Gast)

n/a Beiträge
 
#3

Re: Dateien erstellen, schreiben, Lesen (E/A-Fehler 32 &

  Alt 6. Mai 2008, 21:58
Hallo Klaus

Vielen vielen Dank für deine Antwort. Jetzt seh ich es endlich. ich hatte wohl gleich zehn Wände/Bretter vorm Kopf. Also vielen Danke ich weiß jetzt woran es liegt.
Ich wünsche noch einen schönen Abend.

Gruß Bounser
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Dateien erstellen, schreiben, Lesen (E/A-Fehler 32 &

  Alt 6. Mai 2008, 22:02
dann sollte textf nicht global sein,
vorallem nicht, wenn du es überlappend von mehreren Dateioperationen verwendest.

vielleicht fällt dir so auf, was passiert
Code:
1+  AssignFile(textf,[color=#0000ff]'Einstellungen.txt'[/color]);
1+  Reset(textf);
1   Readln(textf,settings);
1   [color=#0000ff][b]case[/b][/color] Strtoint(settings) [color=#0000ff][b]of[/b][/color]
1     0:
1       [color=#008000]{einfacherRechner1Click(Sender);}[/color]
12        [color=#008000]{textOpen('Einstellungen.txt');}[/color]
12+         AssignFile(textf,Datei);
12+         Rewrite(textf); [s][color=#008000]// an dieser Stelle gibt er E/A-Fehler 32 aus[/color][/s]
12        WriteLn(textf, [color=#0000ff]'0'[/color]);
12*       CloseFile(textf);
1     1:
1       [color=#008000]{wissenschaftlicherRechner1Click(Sender)}[/color]
13        [color=#008000]{textOpen('Einstellungen.txt');}[/color]
13+         AssignFile(textf,Datei);
13+         Rewrite(textf); [color=#008000]// an dieser Stelle gibt er E/A-Fehler 32 aus[/color]
13        WriteLn(textf, [color=#0000ff]'1'[/color]);
13*       CloseFile(textf); [color=#008000]// an dieser Stelle gibt er E/A-Fehler 103 aus[/color]
1     [color=#0000ff][b]else[/b][/color]
1       close;
1   [color=#0000ff][b]end[/b][/color];
1*  CloseFile(textf); [color=#008000]// an dieser Stelle gibt er E/A-Fehler 103 aus[/color]
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Dateien erstellen, schreiben, Lesen (E/A-Fehler 32 &

  Alt 7. Mai 2008, 09:02
Und da haben wir wieder die pösen globalen Variablen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Bounser
(Gast)

n/a Beiträge
 
#6

Re: Dateien erstellen, schreiben, Lesen (E/A-Fehler 32 &

  Alt 7. Mai 2008, 21:03
Guten Abend.
Also ich habe jetzt einfach CloseFile(textf); vor die case-Anweisung geschoben und alles Funktioniert, oder spricht etwas dagegen. Das Problem ist ja, dass ich textf über mehrere Proceduren bearbeite/verwende. Wie könnte man es denn besser machen, als mit globalen Variablen, oder habe ich das jetzt flasch verstanden? Denn wenn ich in der procedure textOpen KEINE globale Variable verwende, dann muss ich ja textf trotzdem zurückliefern, weil das doch sonst, nach Beendigung der Procedure, gelöscht wird, oder etwa nicht? Ich finde es am besten, wenn man dort eine globale Variable benutz, lasse mich aber gerne eines besseren belehren, wenn es nicht gut ist es so zu machen.
Also wie gesagt habe jetzt CloseFile(textf); einfach vor die case-Anweisung verschoben.
Danke für die Antowrten.

Gruß Bounser
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Dateien erstellen, schreiben, Lesen (E/A-Fehler 32 &

  Alt 7. Mai 2008, 21:09
z.B.:
Delphi-Quellcode:
procedure textOpen(var textf: TextFile; Datei: string);
begin
  AssignFile(textf, Datei);
  Rewrite(textf); // an dieser Stelle gibt er E/A-Fehler 32 aus
end;
als Funktion mit Result=TextFile hätte es zwar auch gut ausgesehn, aber wegen des internen TextPuffers im TextFile-Record wäre dieses nicht so gut
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Bounser
(Gast)

n/a Beiträge
 
#8

Re: Dateien erstellen, schreiben, Lesen (E/A-Fehler 32 &

  Alt 7. Mai 2008, 21:19
Hallo himitsu.

Also ist das so kein schlechter code, wie ich das jetzt habe. Bin noch Anfänger und daher sehr unerfahren. Danke für die Hilfe, aber war das nur ein Beispiel, wie man es auch machen könnte, oder sollte man es so machen ? ich weiß tut mir leid, dass ich grad so viel poste.

Gruß Bounser
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Dateien erstellen, schreiben, Lesen (E/A-Fehler 32 &

  Alt 7. Mai 2008, 21:48
Problem hierbei war erstmal die globale Variable,
denn wenn du den ablauf (siehe Beitrag #4) verfolgs, wirst du erkennen, daß diese Variable in einfacherRechner1Click und wissenschaftlicherRechner1Click überschrieben wurde und es somit zu Problemen kam.

Delphi-Quellcode:
procedure textOpen(var textf: TextFile; Datei: string);
begin
  AssignFile(textf, Datei);
  Rewrite(textf);
end;

procedure TForm1.einfacherRechner1Click(Sender: TObject);
var textf: TextFile;
begin
  textOpen(textf, 'Einstellungen.txt');
  try
    WriteLn(textf, '0');
  finally
    CloseFile(textf);
  end;
end;

procedure TForm1.wissenschaftlicherRechner1Click(Sender: TObject);
var textf: TextFile;
begin
  textOpen(textf, 'Einstellungen.txt');
  try
    WriteLn(textf, '1');
  finally
    CloseFile(textf);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var textf: TextFile;
  settings: String;
begin
  AssignFile(textf, 'Einstellungen.txt');
  Reset(textf);
  try
    ReadLn(textf, settings);
  finally
    CloseFile(textf);
  end;
  case Strtoint(settings) of
    0: einfacherRechner1Click(Sender);
    1: wissenschaftlicherRechner1Click(Sender)
    else close;
  end;
end;
zu StrToInt: schau dir mal Delphi-Referenz durchsuchenStrToIntDef und Delphi-Referenz durchsuchenTryStrToInt an.
zuletzt gab es auch 'nen Thread dazu: Hier im Forum suchenStrToIntDef TryStrToInt


PS: so wäre der Fehler auch am Fehlercode erkennbar gewesen
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var textf: TextFile;
  settings: String;
begin
  AssignFile(textf,'Einstellungen.txt');
  Reset(textf);
  try
    Readln(textf,settings);
    case Strtoint(settings) of
      0: einfacherRechner1Click(Sender);
      1: wissenschaftlicherRechner1Click(Sender)
      else close;
    end;
  finally
    CloseFile(textf);
  end;
end;

PSS: eventuell schaust du dir auch noch die Ini's und die Registry an
z.B.: Delphi-Referenz durchsuchenTIniFile, Delphi-Referenz durchsuchenTRegistry
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Bounser
(Gast)

n/a Beiträge
 
#10

Re: Dateien erstellen, schreiben, Lesen (E/A-Fehler 32 &

  Alt 7. Mai 2008, 21:55
ICh wusste nicht, dass es zu Problemen kommt, wenn man die Variable erneut belegt. Danke. Werde ich mir ansehen!
Wünsche noch nen schönen Abend.

Gruß Max
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:30 Uhr.
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