Zitat von
Waldteufel:
Zitat von
atreju2oo0:
mach aus dem rewrite mal nen normales write...
Aber nur aus dem zweiten.
Rewrite öffnet nämlich die Datei...
Stimmt zwar, aber im Kontext des Codes ist es falsch (
WriteLn statt
Write, beide auf
Writeln, dafür das
Reset auf
Rewrite):
Delphi-Quellcode:
try
assignfile (datei, 'rekord.txt'); //rekord wird geladen
reset (datei);
readln (datei, rekordhalter);
readln (datei, punkttxt);
closefile (datei);
except
reset (datei);
rewrite (datei, 'NoName');
rewrite (datei, '10');
closefile (datei);
assignfile (datei, 'rekord.txt');
end;
Da stimmen mehrere Sachen nicht.
- Erstmal muss das AssignFile VOR das Try.
- 'Reset' öffnet eine Datei zum Lesen, 'Rewrite' öffnet sie zum Schreiben, initialisiert sie aber (sie ist also nach dem Rewrite komplett leer).
- Den Dateinamen solltest Du irgendwo als Konstante deklarieren.
- Dein Codefragment setzt 'Rekordhalter' und 'PunkteTxt' nur dann, wenn die Datei existiert, sonst ist der Inhalt der Variablen undefiniert.
Dann würde ich das anders lösen: Der Inhalt der Datei kann nur gelesen werden, wenn die Datei auch existiert, bzw. wird sie mit Vorgabewerten belegt, wenn sie noch nicht exisitiert:
Delphi-Quellcode:
Const
MyFilename = 'rekord.txt';
VorgabeName = 'NoName';
VorgabePunkte = '10';
...
assignfile (datei, MyFileName);
If Not FileExists (MyFileName) Then Begin // Wenn die Datei nicht existiert, wird sie mit Vorgabewerten belegt
ReWrite (datei); // Öffnet die Datei zum Schreiben und setzt den Dateiendezeiger nach vorne
Try // Fehlerbehandlung für 'rewrite' fehlt.
rekordhalter := VorgabeName; // Jetzt sind die Variablen belegt
PunktTxt := VorgabePunkte;
WriteLn (datei, RekordHalter); // Vorgabewerte in die Datei schreiben
WriteLn (datei, PunktTxt);
Finally
CloseFile (Datei);
End
End
Else Begin // Datei existiert, kann also gelesen werden
reset (datei); // Hier müsste noch eine komplette Fehlerbehandlung rein
Try // Denn die Datei kann gesperrt sein, oder sonstwas
readln (datei, rekordhalter);
readln (datei, punkttxt);
Finally
closefile (datei);
End
End;
...
Die Fehlerbehandlung für das Öffnen der Datei kann man durch umschließen der gesamten Routine mit einem Try...Except erreichen, nurdas das etwas ungenau ist.