Hallo Speed!
Da sehe ich gleich mehrere Problemstellen:
1. Du hast
IOResult und
try/finally gemischt - das ist falsch.
Entweder verwendet man
IOResult - dann auch beim
Seek,
Write und
CloseFile, oder man verwendet
try/finally bzw.
try/except.
Nebenbei: das
try/finally wirft eine Exception - muß also nochmal mit
try/except geklammert sein - oder soll das Programm bei Speicherfehlern mit einer für den Nutzer nichtssagenden Fehlermeldung abstürzen?
2. So wie es da steht (
ReWrite), wird die Datei jedesmal neu erstellt. Was soll dann da das
Seek? Das
Write schreibt fortlaufende Datensätze, beginnend an der aktuellen Position. Die ist nach
ReWrite schon auf den Dateianfang gesetzt.
3. verwendest Du in Deinem letzten Codeschnipsel relative Dateinamen. Das kann klappen, kann aber auch gewaltig in die Hose gehen. Ein
OpenDialog oder ein "Programm ausführen in" in einer Desktop- oder Startmenüverknüpfung reicht, um die Datei sonstwohin zu schreiben. Schreibe also
AssignFile(Datei,ExtractFilePath(ParamStr(0))+'Score.dat'); und Du bist auf halbwegs sicherer Seite. Sollte allerdings - wie unter dem Betriebssystem Windows üblich - der Anwender keine Schreibberechtigung im Programmverzeichnis haben, knallt es erneut. Mein Tipp: Unter DOS (also Win9x/ME) sollte man die Datei im Programmverzeichnis haben, unter Windows (NT, 2000, XP) im Verzeichnis für Anwenderdaten, siehe hierzu
SHGETSPECIALFOLDERPATH, der Ordner ist CLIDL_APPDATA. Das landet dann (auf einem deutschsprachigen, nicht umgestellten Windows) in
"C:\Dokumente und Einstellungen\<benutzernamen>\Anwendungsdaten" und ist damit für jeden Benutzer individuell.
4. Hast Du vielleicht eine Score-Datei mit auf die CD gebrannt und auf Platte kopiert? Dann kann die Datei schreibgeschützt sein! Dateien auf CD haben das Attribut "Schreibgeschützt" und Win9x kopiert alle Attribute mit. Bei XP hat man das Problem erkannt, da wird das Attribut zurückgesetzt (sollte es zumindest).
Wenn Du ganz sicher sein willst, solltest Du einfach die Attribute auslesen und ggf. anpassen.
Anmerkung: In der Regel wird für die Ermittlung der Spezialordner
SHGETSPECIALFOLDERLOCATION vorgeschlagen. Ich bevorzuge
SHGETSPECIALFOLDERPATH, weil da direkt der Pfad geliefert wird. Bei Location wird eine Datenstruktur geliefert, die man noch auswerten und dann freigeben muß. Allerdings steht die Path-Variante bei Win95 und WinNT4 nur zur Verfügung, wenn mindestens IE4 installiert ist (ist das eine Einschränkung?)!
Bei Win9x liegt der Einstellungsordner in
"C:\Windows\Anwendungsdaten" - in ein Unterverzeichnis des Systemverzeichnisses gehört für mich sowas nicht hin, weil der gemeine DAU hier zuviel Schaden beim Löschen anrichten kann - und unterschiedliche Benutzer gibt es nicht. Deshalb schreibe ich das bei Win9x ins Programmverzeichnis.
Gruß
Dietmar Brüggendiek