Entwickler-Ecke

Sonstiges (Delphi) - Begreife E/A-Fehler nicht


Gabberman - Mo 15.01.07 19:42
Titel: Begreife E/A-Fehler nicht
Hy an alle,
ich hab ma wieder ein Problem.
In meinem Programm gibt es folgende Routine:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
  AssignFile(optionen, 'data/optionen.dat');
  Reset(optionen);
  AssignFile(optionen_neu, 'data/optionen.tmp');
  Rewrite(optionen_neu);
  for i:=0 to (optioncolour-1do begin
    Readln(optionen, ausgelesen);
    Writeln(optionen_neu, ausgelesen);
  end;
  Writeln(optionen_neu, farbeausgewaehlt.caption);
  while not EOF(optionen) do begin
    Readln(optionen, ausgelesen);
    Writeln(optionen_neu, ausgelesen);
  end;
  farbeausgewaehlt.Caption:='';
  CloseFile(optionen);
  DeleteFile('data/optionen.dat');
  Reset(optionen_neu);
  AssignFile(optionen, 'data/optionen.dat'); 
  Rewrite(optionen); //Hier gibts jetzt den E/A-Fehler 32


Also zur Erklärung:
Es wird quasi eine Änderung in einer .dat Datei vorgenommen. Eigentlich nicht so schwer. Der ließt halt alles bis zum zu ändernden aus der alten Datei, schreibt das ausgelesene in eine .tmp datei. Dann werden beide geschlossen. Die .dat soll gelöscht und wieder neu erstellt werden um dann zu guterletzt alles aus der .tmp wieder in die .dat zu schreiben.
So weit so gut. Nu kommt an markierter Stelle immer der E/A-Fehler und ich hab echt keinen Plan was falsch sein soll!!!

Ich hoffe, dass jemand von euch mir helfen kann!!!

Gruß

Gabberman

[mod="Tino"]Im Titel "Ich glaub ich bin zu doof:" entfernt.


Kroko - Mo 15.01.07 19:44

(1) verwende nie relative Pfade, sondern immer absolute!
(2) schau dir mal CopyFile an!


Gabberman - Mo 15.01.07 19:47

sorry aber davon kannst du mich nicht überzeugen. Das kann auch nicht der Fehler sein. Hab ich schon probiert:

Delphi-Quelltext
1:
2:
GetDir(0,path)
path:=path + 'data/optionen.tmp';

und so weiter... ging auch ni!!!


jakobwenzel - Mo 15.01.07 19:47

Vielleicht solltest du dir erstmal darüber im klaren werden, was dieser Fehler bedeutet:
Zitat:

EA-Fehler 32 ist eine "Sharing Violation", das bedeutet, dass die Datei gerade noch von einem anderen oder deinem Programm offen gehalten wird.


Gabberman - Mo 15.01.07 19:48

Ja ich hab die Fehlerbeschreibung in der Hilfe auch gelesen, aber ich weiß das niemand anderes darauf zugreift!!!
Sorry, aber es hat sich grade selber erledigt... :oops: Danke trotzdem!!!


jakobwenzel - Mo 15.01.07 19:50

OK, ich hab grad gesehn, dass du die Datei schonmal lädst...
Probier mal ein sleep mit nem Wert von 1000 (erstmal zum Testen nen so hohen Wert), weil Windows vllt. nicht mit dem Verwalten der Dateizeiger hinterherkommt. Wenns dann klappt, kannste den Wert schrittweise verkleinern.


Narses - Mo 15.01.07 19:51

Moin!

Warum nimmst du keine INI-Datei? ;)

cu
Narses