AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem bei Speichen von Filestream

Ein Thema von Klausi1305 · begonnen am 20. Jan 2011 · letzter Beitrag vom 24. Jan 2011
 
Klausi1305

Registriert seit: 20. Jan 2011
Ort: Leipzig
15 Beiträge
 
Turbo Delphi für Win32
 
#1

Problem bei Speichen von Filestream

  Alt 20. Jan 2011, 19:11
Hallo,

Ich fingere zur Zeit an einem Simulator für die Berrechnung von Gefechten rum. Ich erstelle zu erst ein Objekt Einheit und will es später weiterverwenden.
Ich wollte bis jetzt die Sache in einem TFilestream verwenden. jedoch scheint es Probleme beim Speichern des Streams zu geben.
Ich lese von Comboboxen den gewählten Itemindex aus und wandle diese in einen String um und übergebe diese Variable an mein Objekt...(Ich weiss nicht wie ich direkt Integerwerte in einen Streaj speicher). Dies läuft auch einwandfrei..Trotz zig maliger Beobachtung der Speicherung im Debugger,welches auch scheinbar das macht, was es soll, werden irgendwie auf mir unersichtliche Weise die Werte "um eine Position" verschoben. Bsp aus Combobox6 wird der Index 4 in der Variable eigentlich gespeichert, jedoch beim laden hat Combobox6 den Wert 0 dafür aber Combobox7 den Wert....

Ich bin am verzweifeln...
Ich verwende Turbo Delphi 2006 und Vista

alle Variablen sind vom Typ AnsiString....

Hier die Procedure zum Speichern der Werte ins Object und dessen Speicherung in einen TFilestream:


Delphi-Quellcode:
//Einstellungen speichern
procedure TForm2.Button1Click(Sender: TObject);

var Einheit : TEinheitTyp;
    Stream : TFilestream;
    i : Integer;
    S : String;

begin

   Einheit:= TEinheittyp.Create; // neues Exemplar muss in die Liste
   Einheit.Init;
   //NeuerEinheitTyp.SetzeName(Edit1.Text);
   Einheit.SetzeName(Form2.Edit1.Text);
   Einheit.SetzeGrundTyp(IntToStr(ComboBox1.ItemIndex));
   Einheit.SetzeGeschwindigkeit(IntToStr(ComboBox2.ItemIndex));
   Einheit.SetzeBenzinGef(IntToStr(ComboBox3.ItemIndex));
   Einheit.SetzeBenzinBew(IntToStr(ComboBox4.ItemIndex));
   Einheit.SetzeMunGef(IntToStr(ComboBox5.ItemIndex));
   Einheit.SetzeGrösse(IntToStr(ComboBox13.ItemIndex));
   //Schreiben Landeinheit Werte
   Einheit.SetzePanzerAn(IntToStr(ComboBox6.ItemIndex));
   Einheit.SetzePanzerVer(IntToStr(ComboBox7.ItemIndex));
   Einheit.SetzeInfAn(IntToStr(ComboBox8.ItemIndex));
   Einheit.SetzeInfVer(IntToStr(ComboBox9.ItemIndex));
   Einheit.SetzeBoLuAn(IntToStr(ComboBox10.ItemIndex));
   Einheit.SetzeBoLuVer(IntToStr(ComboBox11.ItemIndex));
   Einheit.SetzeLandSpez(IntToStr(ComboBox12.ItemIndex));
   //Schreiben Lufteinheiten Werte;
   Einheit.SetzeLuLuAn(IntToStr(ComboBox14.ItemIndex));
   Einheit.SetzeLuLuVer(IntToStr(ComboBox15.ItemIndex));
   Einheit.SetzeLuBoAn(IntToStr(ComboBox16.ItemIndex));
   Einheit.SetzeLuBoVer(IntToStr(ComboBox17.ItemIndex));
   //Schreiben Marineeinheiten Werte;
   Einheit.SetzeSeeSeeAn(IntToStr(ComboBox18.ItemIndex));
   Einheit.SetzeSeeSeeVer(IntToStr(ComboBox19.ItemIndex));
   Einheit.SetzeSeeLuftAn(IntToStr(ComboBox20.ItemIndex));
   Einheit.SetzeSeeLuftVer(IntToStr(ComboBox21.ItemIndex));
   Einheit.SetzeSeeSpez(IntToStr(ComboBox22.ItemIndex));

   //Schreiben in Datei mit Filestream
   Stream := TFileStream.Create(Form1.programmpfad+'\Einheittyp\'+Einheit.GibName, fmCreate);
   Einheit.InDateiSchreiben(Stream,Form1.programmpfad+'\Einheittyp\'+Einheit.GibName);
   Stream.Free;
   Einheit.Free;
Hier die Procedure aus der Klasse Einheittyp zum speichern

Delphi-Quellcode:
procedure TEinheitTyp.InDateiSchreiben (var Fs : TFilestream; Filename : String);
(* -------------------------------------------------------------------- *)
var
   len : integer;

begin
  DeleteFile(Filename);
  //Allgemeine Werte
  FS.Position:=0;
   Len:=0;
  Len := Length(Name);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(Name)^, Len);
    Len:=0;
  Len := Length(GrundTyp);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(GrundTyp)^, Len);
    Len:=0;
  Len := Length(Geschwindigkeit);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(Geschwindigkeit)^, Len);
    Len:=0;
  Len := Length(BenzinGef);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(BenzinGef)^, Len);
     Len:=0;
   Len := Length(BenzinBew);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(BenzinBew)^, Len);
     Len:=0;
  Len := Length(MunGef);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(MunGef)^, Len);
     Len:=0;
  Len := Length(Grösse);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(Grösse)^, Len);
    Len:=0;
  Len := Length(BenzinGef);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(BenzinGef)^, Len);
     Len:=0;
  //Landeinheitwerte
  Len := Length(PanzerAn);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(PanzerAn)^, Len);
     Len:=0;
  Len := Length(PanzerVer);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(PanzerVer)^, Len);
         Len:=0;
  Len := Length(InfAn);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(InfAn)^, Len);
       Len:=0;
   Len := Length(InfVer);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(InfVer)^, Len);
     Len:=0;
  Len := Length(BoLuAn);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(BoLuAn)^, Len);
   Len:=0;
  Len := Length(BoLuVer);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(BoLuVer)^, Len);
    Len:=0;
  Len := Length(LandSpez);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(LandSpez)^, Len);
    Len:=0;
  //Lufteinheitwerte
  Len := Length(LuLuAn);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(LuLuAn)^, Len);
    Len:=0;
  Len := Length(LuLuVer);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(LuLuVer)^, Len);
    Len:=0;
  Len := Length(LuBoAn);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(LuBoAn)^, Len);
    Len:=0;
   Len := Length(LuBoVer);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(LuBoVer)^, Len);
    Len:=0;
  //Marineeinheitwerte
  Len := Length(SeeSeeAn);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(SeeSeeAn)^, Len);
     Len:=0;
  Len := Length(SeeSeeVer);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(SeeSeeVer)^, Len);
     Len:=0;
  Len := Length(SeeLuftAn);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(SeeLuftAn)^, Len);
     Len:=0;
   Len := Length(SeeLuftVer);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(SeeLuftVer)^, Len);
     Len:=0;
  Len := Length(SeeSpez);
  FS.WriteBuffer(Len, SizeOf(Len));
  FS.WriteBuffer(PAnsiChar(SeeSpez)^, Len);

end;
und hier die zum lesen aus der Klasse Einheittyp
Delphi-Quellcode:
procedure TEinheitTyp.AusDateiLesen (var Fs : TFilestream) ;
(* -------------------------------------------------------------------- *)
var
   len : integer;
begin
  Len:=0;
  //Allgemeine Werte
  FS.read(Len, SizeOf(Len));
  SetLength(Name, Len);
  FS.read(PChar(Name)^, Len);
  Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(GrundTyp, Len);
  FS.read(PChar(GrundTyp)^, Len);
   Len:=0;
   FS.read(Len, SizeOf(Len));
  SetLength(Geschwindigkeit, Len);
  FS.read(PChar(Geschwindigkeit)^, Len);
  Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(BenzinGef, Len);
  FS.read(PChar(BenzinGef)^, Len);
  Len:=0;
   FS.read(Len, SizeOf(Len));
  SetLength(BenzinBew, Len);
  FS.read(PChar(BenzinBew)^, Len);
  Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(MunGef, Len);
  FS.read(PChar(MunGef)^, Len);
  Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(Grösse, Len);
  FS.read(PChar(Grösse)^, Len);
  Len:=0;
  //Landeinheitwerte
  FS.read(Len, SizeOf(Len));
  SetLength(PanzerAn, Len);
  FS.read(PChar(PanzerAn)^, Len);
  Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(PanzerVer, Len);
  FS.read(PChar(PanzerVer)^, Len);
  Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(InfAn, Len);
  FS.read(PChar(InfAn)^, Len);
  Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(InfVer, Len);
  FS.read(PChar(InfVer)^, Len);
   Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(BoLuAn, Len);
  FS.read(PChar(BoLuAn)^, Len);
   Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(BoLuVer, Len);
  FS.read(PChar(BoLuVer)^, Len);
  Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(LandSpez, Len);
  FS.read(PChar(LandSpez)^, Len);
  Len:=0;
  //Lufteinheitwerte
  FS.read(Len, SizeOf(Len));
  SetLength(LuLuAn, Len);
  FS.read(PChar(LuLuAn)^, Len);
  Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(LuLuVer, Len);
  FS.read(PChar(LuLuVer)^, Len);
   Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(LuBoAn, Len);
  FS.read(PChar(LuBoAn)^, Len);
   Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(LuBoVer, Len);
  FS.read(PChar(LuBoVer)^, Len);
   Len:=0;
  //Marineeinheitenwerte
  FS.read(Len, SizeOf(Len));
  SetLength(SeeSeeAn, Len);
  FS.read(PChar(SeeSeeAn)^, Len);
   Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(SeeSeeVer, Len);
  FS.read(PChar(SeeSeeVer)^, Len);
   Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(SeeLuftAn, Len);
  FS.read(PChar(SeeLuftAn)^, Len);
   Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(SeeLuftVer, Len);
  FS.read(PChar(SeeLuftVer)^, Len);
   Len:=0;
  FS.read(Len, SizeOf(Len));
  SetLength(SeeSpez, Len);
  FS.read(PChar(SeeSpez)^, Len);
end;
Sebastian

Geändert von Klausi1305 (20. Jan 2011 um 20:11 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz