Entwickler-Ecke

Dateizugriff - Probleme beim laden/speichern (I/O Fehler 32)


matschmann - Mi 06.04.05 16:09
Titel: Probleme beim laden/speichern (I/O Fehler 32)
Hallo,
ich habe ein Problem, bei dem ich absolut nicht weiterkomme (wahrscheinlich steh ich aber nur ziemlich auf dem Schlauch):

Ich habe zwei Funktionen in einer Klasse, die eine öffnet eine Datei, die andere speichert. Öffne ich eine Datei und will dann mit der writeFunktion die gleiche Datei ersetzen, dann krieg ich immer die Fehlermeldung 32.

Hier die beiden Funktionen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
function TNuvemReader.writeNuvem(myFile:String):boolean;
Var j    : Word;
    F : TextFile;

Begin
 AssignFile(F,myFile);
 ReWrite(F);
 
 WriteLn(F,'Nuvem-S Vers. 0.1');
 [....]
 For j:=0 To length(werte)-1 Do
  WriteLn(F,Werte[j].zeit:12:7,'    ',
             Werte[j].weggeber[1]:5,'   ',
             Werte[j].weggeber[2]:5);
 CloseFile(F);
 result:=true; 

End;



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
function TNuvemReader.readNuvem2File(myFile:String):boolean;
Var j  : Word;
    co,x : Integer;
    s  : String;
    So : TextFile;

Begin
  AssignFile(So,myfile);
  ReSet(So);


  ReadLn(So,s);             // Programmversion
  if s<>'Nuvem-S Vers. 0.1' then begin
    CloseFile(So);
    result:=false
  end else begin

    [....]

    For j:=0 To Pred(datenpunkte) Do
      ReadLn(So,werte[j].zeit,
                werte[j].weggeber[1],
                werte[j].weggeber[2]);

    CloseFile(So);
    result:=true;
  end;
 
End;



Moderiert von user profile iconraziel: Topic aus CLX / Delphi Language (Object-Pascal) verschoben am Mi 06.04.2005 um 16:39
Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.


MAlsleben - Do 07.04.05 09:51

Hi,

Fehlercode 32 bedeutet: Verletzung bei der gemeinsamen Benutzung .

Offenbar ist die Datei noch geöffnet, indem Moment wo Du sie mit rewrite überschreibst.

Gruß Micha.


jasocul - Do 07.04.05 10:00

Sowas kann durch einen Programmabsturz oder ein vergessenes (oder nicht durchgeführtes bei einer Exception) CloseFile verursacht werden. Andere Möglichkeit: Du greifst mit zwei Programmen gleichzeitig darauf zu.
Theoretisch sollte ein Neustart des Rechners Abhilfe schaffen. Wenn die Datei nämlich erstmal gesperrt ist, gibt Windoof die so schnell nicht wieder frei.


Delete - Do 07.04.05 12:39

Man braucht einfach nur alle Programme beenden, die auf die Datei zugreifen, dann räumt Windows automatisch aus und ginbt alle Kernelobjekct automatisch wieder frei.


jasocul - Do 07.04.05 12:44

user profile iconLuckie hat folgendes geschrieben:
Man braucht einfach nur alle Programme beenden, die auf die Datei zugreifen, dann räumt Windows automatisch aus und ginbt alle Kernelobjekct automatisch wieder frei.

Soweit die Theorie, wie es sein sollte. :twisted: (Nichts für ungut Luckie :wink: )
Ich habs in der Praxis leider schon anders erlebt. Nach einem Neustart des Rechners sollte es auf jeden Fall wieder funktionieren.


drstar - Do 25.05.06 01:44

chkdsk Laufwerk: /x in der DOS-Eingabeaufforderung wirkt manchmal einfach wunder, wenn es nicht grad eine Systempartition ist (Laufwerk durch den entsprechenden Bucstaben ersetzen).