Entwickler-Ecke

Dateizugriff - Datei wird nicht richtig gelesen (Blockread/Blockwrite)


Samolex - Mi 22.08.07 00:30
Titel: Datei wird nicht richtig gelesen (Blockread/Blockwrite)
Hi,

Ich habe ein Programm geschrieben, in dem ich einige Optionen Speichern möchte.
Beim starten des Programms wird gepüft, ob die Options-Datei vorhanden ist. Wenn sie nicht vorhanden ist, so wird der schritt "Laden" übergangen und es bleiben die Vordefinierten Optionen. Wenn der benutzer jetzt neue Optionen einstellt so wird die Datei angelegt und die Daten drinne gespeichert. Beim erneuten Startetn sollen dann diese Daten gelesen werden. Und hir ist mein Problem er liest die Daten nicht richtig (oder schreibt er sie nicht richtig ?)


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:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
...
t_Option = Record
             SoundPfad : String;
             Soundan   : Boolean;
           end;

var
  Sound1  : TSound1;
  Optio   : t_Option;
  dir     : String;

const FileName = '\Optionen.Dat';

implementation

uses Countdown_Unit;

{$R *.DFM}

procedure TSound1.Button_okClick(Sender: TObject);
var dat : File;
begin
  Optio.SoundPfad := Sound1.Edit_SoundPfad.Text;
  Optio.Soundan := Sound1.Check_Play.Checked;
  AssignFile(dat,dir+FileName);
  Rewrite (dat,1);
  BlockWrite (dat,Optio,SizeOf(optio));
  CloseFile (dat);
  ShowMessage ('Datei : "'+dir+'\Optionen.ops" erfolgreich gespeichert');
  Sound1.Close;
end;

procedure TSound1.Button_SuchenClick(Sender: TObject);
begin
  if Open.Execute then
    Sound.Sound1.Edit_SoundPfad.Text := Open.FileName;
end;

procedure TSound1.FormCreate(Sender: TObject);
var dat : File;
begin
  GetDir (0,dir);
  if FileExists (dir+FileName) then begin
    AssignFile(dat,dir+FileName);
    Reset (dat,1);
    BlockRead (dat,Optio,SizeOf(Optio));
    CloseFile (dat);
    ShowMessage (Optio.SoundPfad);
    //Sound1.Edit_SoundPfad.Text := Optio.SoundPfad;
    Sound1.Check_Play.Checked  := Optio.Soundan;
  end;
end;


MfG Samolex

PS : Ich hänge mal,zum leichteren Verständnis, die "Exe" an.

end.


Narses - Mi 22.08.07 00:33
Titel: Re: Datei wird nicht richtig gelesen (Blockread/Blockwrite)
Moin!

Records dürfen keine dynamischen Variablen enthalten, wenn man diese typisiert Speichern will: :idea: :mahn:
user profile iconSamolex hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
3:
4:
t_Option = Record
             SoundPfad : String;
             Soundan   : Boolean;
           end;

Warum nimmst du keine INI-Datei? Scheint mir in diesem Fall die bessere Wahl. ;)

cu
Narses

//EDIT: Die Exe nutzt da herzlich wenig, der Code ist das Wichtige! Kannste ruhig wieder entfernen und den EE-Server entlasten... ;)


Reinhard Kern - Mi 22.08.07 02:48
Titel: Re: Datei wird nicht richtig gelesen (Blockread/Blockwrite)
user profile iconSamolex hat folgendes geschrieben:
Hi,

..... Und hir ist mein Problem er liest die Daten nicht richtig (oder schreibt er sie nicht richtig ?)



Hallo,

das sollte man natürlich immer als erstes überprüfen, gleich nach dem ersten Schreiben - mit einem Hex-Editor: sieht die Datei so aus, wie du dir das gedacht hast?

Gruss Reinhard


Samolex - Mi 22.08.07 08:43
Titel: Re: Datei wird nicht richtig gelesen (Blockread/Blockwrite)
user profile iconNarses hat folgendes geschrieben:
Moin!


Warum nimmst du keine INI-Datei? Scheint mir in diesem Fall die bessere Wahl. ;)


//EDIT: Die Exe nutzt da herzlich wenig, der Code ist das Wichtige! Kannste ruhig wieder entfernen und den EE-Server entlasten... ;)


Hi,

habe die Exe entfertnt...

wie deklariere ich eine INI-Datei ?

MfG

Samolex


Narses - Mi 22.08.07 10:09
Titel: Re: Datei wird nicht richtig gelesen (Blockread/Blockwrite)
Moin!

user profile iconSamolex hat folgendes geschrieben:
wie deklariere ich eine INI-Datei ?

Such mal nach Suche in: Delphi-Forum, Delphi-Library TINIFILE, gibt Beispiel-Code genug im Forum. :les: ;)

cu
Narses