Entwickler-Ecke

Dateizugriff - Ini wird nicht erzeugt ... Fehler bei Except???


Terra23 - Di 12.03.13 23:51
Titel: Ini wird nicht erzeugt ... Fehler bei Except???
Hi Leute!

Ich versuche, beim Programmstart zwei Userdaten aus einer INI zu lesen.

Mein Code:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
Try
  Try
  Ini := TIniFile.Create(IniName);
  Spielername := Ini.ReadString('Userdaten''Spielername''Hans Maulwurf');
  Spielercossy := Ini.ReadString('Userdaten''Cossy''1234567890');
  Except
  Spielername := InputBox('Spielernamen eingeben...''Name:''');
  Spielercossy := InputBox('Cossy eingeben...''Cossy:''');

  Ini.WriteString('Userdaten''Spielername', Spielername);
  Ini.WriteString('Userdaten''Cossy', Spielercossy);
  End;
Finally
Ini.Free;
End;


Was soll der Code tun? Er soll zwei Strings auslesen und in "Spielername" und "Spielercossy" speichern (beides String-Variablen). Wenn die Datei nicht existiert, soll er dem User nacheinander zwei Input-Fenster anzeigen, wo er seine Daten eintragen kann und dann die Daten sichern.

Komischerweise wird dieser Except-Teil aber nicht ausgeführt. Die INI-Datei existiert nicht, daher müsste aber Except doch ausgeführt werden, oder?

Gruß,

Terra


Jann1k - Di 12.03.13 23:59

Wenn ich das richtig im Kopf habe, wird durch TIniFile.create die Inifile erzeugt, falls sie nicht existiert.


bummi - Mi 13.03.13 00:32

wie Jann1k feststellte wird der except - Fall nur eintreten wenn die INI nicht erstellt werden kann (Ordner nicht vorhanden/keine Schreibrechte) in diesem fall wird auch Deine Except Routine fehlschlagen.
Das heißt IMHO dass Du zwei Fehlerbehandlungsroutinen benötigst.
- Datei kann nicht erstellt oder gelesen werden
-Datei ist nicht vorhanden oder Defaultwerte = gelesene Werte (Sollten IMHO dann aber leer sein)

eigentlich kommt och eine dritte Fehlerquelle hinzu, INI kann gelesen werden aber wegen fehlender Schreibrechte nicht mehr geschrieben werden.


Terra23 - Mi 13.03.13 00:41

Also quasi so...?!?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
If Not FileExists(...) Then
Begin 
/// Aufforderung über Inputboxen
/// Versuch, in INI zu schreiben
End Else
Begin
/// Versuch, INI zu lesen
/// Werte aus INI übernehmen
End;


bummi - Mi 13.03.13 00:52

Hängt von der Absicht ab, wenn Du sinnvolle Vorgabewerte hast die Du im Zweifelsfalle übernehmen willst läge das Hauptaugenmerk darauf ob die INI geschrieben werden kann oder gegf. eine INI datei aus eine anderen Ordner zu verwenden wäre.
Aber da wird es dann eh komplizierter (Default.ini im ProgrammeOrdner vs. User.ini im Userfolder), was genau wie umzusetzen ist kannst letztlich nur Du entscheiden ....


jaenicke - Mi 13.03.13 17:59

Das ganze habe ich schon einmal hier gekapselt:
http://www.delphi-forum.de/viewtopic.php?t=92348
Wenn du das so nicht direkt benutzen möchtest, findest du aber auf jeden Fall Material zum Anschauen. ;-)


Terra23 - Do 14.03.13 00:12

@jaenicke: Danke, werd mir das mal anschauen. Sieht auf den ersten Blick sehr einschüchternd und kompliziert aus.

@Topic: Können wir also festhalten, dass EXCEPT nicht durchlaufen wird, wenn eine Datei nicht existent ist?


WasWeißDennIch - Do 14.03.13 09:07

user profile iconTerra23 hat folgendes geschrieben Zum zitierten Posting springen:
@Topic: Können wir also festhalten, dass EXCEPT nicht durchlaufen wird, wenn eine Datei nicht existent ist?

Exakt.


jaenicke - Do 14.03.13 09:28

user profile iconTerra23 hat folgendes geschrieben Zum zitierten Posting springen:
@jaenicke: Danke, werd mir das mal anschauen. Sieht auf den ersten Blick sehr einschüchternd und kompliziert aus.
Sollte es aber nicht sein. Zumindest die Einbindung, der Quelltext mag nicht so einfach sein. ;-)

Du kannst ja (nach einer Sicherung des Projektes natürlich) das automatische Tool ausprobieren:
http://www.entwickler-ecke.de/viewtopic.php?p=580893
Bei kleineren Projekten funktionierte das gut, auch wenn ich es eigentlich noch einmal richtig machen und überarbeiten müsste...