Hi ich möchte bei meinem programm ein struct binär in eine Datei speichern
dazu habe ich zunächst ein programm geschrieben welches zuerst das struct in die Datei schreibt... vorher einen testwert in ein Label schreibt... später wird dann wieder das Struct aus der Datei geladen und der Selbe-Wert in ein anderes Label übergeben.
Die beiden Anzeigen der Labels sind korrekt und gleich. Hiermal der Quelltext von dem Programm:
Alles anzeigen
Jetzt habe ich ein zweites Programm entworfen welches AUSSCHLIEßLICH aus der Datei ließt.
Ich habe zwei Versionen des Programms geschrieben.
Bei der ersten wird als Wert 1310016 ausgegeben wo eigentlich 126 stehen sollte.
hier der Quelltext dazu:
Alles anzeigen
In der zweiten Version habe ich den letzten Teil in eine While Schleife verwandelt:
Hier ändert sich an dem Caption des Labels garnichts...
Was mache ich falsch beim auslesen der Datei??
Wenn es bei meinem ersten Programm geht müsste das Reine lesen doch auch gehen oder???
beide Programme sind im selben Ordner haben also zugriff auf die *.dat..
Kann mir jemand helfen der schon Erfahrung mit dem binären speichern hat??
MfG Straightflush
dazu habe ich zunächst ein programm geschrieben welches zuerst das struct in die Datei schreibt... vorher einen testwert in ein Label schreibt... später wird dann wieder das Struct aus der Datei geladen und der Selbe-Wert in ein anderes Label übergeben.
Die beiden Anzeigen der Labels sind korrekt und gleich. Hiermal der Quelltext von dem Programm:
Quellcode
- //---------------------------------------------------------------------------
- #include <vcl.h>
- #pragma hdrstop
- #include <iostream>
- #include <fstream>
- #include "Programm1.h"
- //---------------------------------------------------------------------------
- #pragma package(smart_init)
- #pragma resource "*.dfm"
- using namespace std;
- TForm1 *Form1;
- struct Eintrag
- {
- char adresse[40];
- int zeichen;
- int interval;
- };
- //---------------------------------------------------------------------------
- __fastcall TForm1::TForm1(TComponent* Owner)
- : TForm(Owner)
- {
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::FormCreate(TObject *Sender)
- {
- Eintrag first;
- first.zeichen = 126;
- first.interval = 15;
- strcpy(first.adresse,"www.google.de");
- fstream File("Person.dat", ios::out|ios::binary|ios::in);
- if (File.is_open())
- {
- Label2->Caption = first.adresse;
- File.write((const char*)&first, sizeof(first));
- File.close(); // Datei schließen
- }
- // Datei zum Lesen öffnen.
- File.open("Person.dat", ios::in|ios::binary);
- if (File.is_open())
- {
- Eintrag second;
- while (File.read((char*)&second, sizeof(second)))
- Label1->Caption = second.adresse;
- }
- }
- //---------------------------------------------------------------------------
Jetzt habe ich ein zweites Programm entworfen welches AUSSCHLIEßLICH aus der Datei ließt.
Ich habe zwei Versionen des Programms geschrieben.
Bei der ersten wird als Wert 1310016 ausgegeben wo eigentlich 126 stehen sollte.
hier der Quelltext dazu:
Quellcode
- //---------------------------------------------------------------------------
- #include <vcl.h>
- #pragma hdrstop
- #include <iostream>
- #include <fstream>
- #include "Programm2.h"
- //---------------------------------------------------------------------------
- #pragma package(smart_init)
- #pragma resource "*.dfm"
- using namespace std;
- TForm1 *Form1;
- struct Eintrag
- {
- char adresse[40];
- int zeichen;
- int interval;
- };
- //---------------------------------------------------------------------------
- __fastcall TForm1::TForm1(TComponent* Owner)
- : TForm(Owner)
- {
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::FormCreate(TObject *Sender)
- {
- // fstream damit die Datei zuerst schreibend und dann lesend geöffnet werden kann.
- fstream File("Person.dat", ios::out|ios::binary|ios::in);
- // Datei zum Lesen öffnen.
- File.open("Person.dat", ios::in|ios::binary);
- if (File.is_open())
- {
- Eintrag second;
- File.read((char*)&second, sizeof(second))
- Label1->Caption = second.zeichen;
- }
- }
- //---------------------------------------------------------------------------
In der zweiten Version habe ich den letzten Teil in eine While Schleife verwandelt:
Hier ändert sich an dem Caption des Labels garnichts...
Was mache ich falsch beim auslesen der Datei??
Wenn es bei meinem ersten Programm geht müsste das Reine lesen doch auch gehen oder???
beide Programme sind im selben Ordner haben also zugriff auf die *.dat..
Kann mir jemand helfen der schon Erfahrung mit dem binären speichern hat??
MfG Straightflush