ifstream/ofstream...binär...-Problem



  • Hallo,
    ich habe da mal ein Problem, und nachdem ich mich einige Zeit durchs Forum gewühlt habe, werde ich jetzt wohl doch mal fragen müssen.
    Ich habe mir folgenden Code gebaut, um ein bischen mit Binär-Dateien üben zu können.
    Ich habe eine binäre Datei und weiß auch wie sie strukturiert ist (long,long,char,long,double...).
    Wie kann ich die Daten aus der Datei lesen und dann als ASCII-Zeichen anzeigen lassen?

    Zu dem Beispiel:
    Ich weiß, dass nach 38 Byte ein 12 Byte langer String (char[12]) steht. Diesen wollte ich mir gern als ASCII anzeigen lassen. Button1 ist hierfür unwichtig - einfach ignorieren.
    Wenn ich jetzt aber Button2 drücke sehe ich nur "Murks". Habe ich irgendwo einen Gedankenfehler? Könnt Ihr mir weiterhelfen?

    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include "OK03.h"
    #include <fstream>
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    
    //---------------------------------------------------------------------------
    
    using namespace std;
    TForm1 *Form1;
    
    //---------------------------------------------------------------------------
    
    //---Beispiel-struct:--------------------------------------------------------
    struct TPersData
      {
      wchar_t Offset[38];
      wchar_t Stationsname[12];
      };
    
    //---------------------------------------------------------------------------
    
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
      {
      }
    
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
      {
      TPersData PersData;
      Edit1->Text.WideChar(PersData.Offset, 38);
      Edit2->Text.WideChar(PersData.Stationsname, 12);
      ofstream outfile("c:\\test2.dat", ios::binary);
      if (outfile.good())
        outfile.write((char*)&PersData, sizeof(TPersData));
      else
        ShowMessage("Fehler beim öffnen der Datei!");
      outfile.close();
      }
    
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button2Click(TObject *Sender)
      {
      ifstream infile("c:\\Testdateien\\Info.dat", ios::binary);
      if (infile.good())
        {
        TPersData PersData;
        infile.read((char*)&PersData, sizeof(TPersData));
        infile.close();
        Edit1->Text = PersData.Offset;
        Edit2->Text = PersData.Stationsname;
        }
      else
        ShowMessage("Fehler beim öffnen der Datei!");
      }
    

    Nico


Anmelden zum Antworten