Datei binär lesen in C#

  • #1
R

Rassamie

Neues Mitglied
Themenersteller
Dabei seit
29.03.2005
Beiträge
1
Reaktionspunkte
0
Ich habe eine Datei die binär weggeschrieben wurde (mit einem Programm in c++ 6.0) nun muss ich die Datei einlesen mit C#. Dabei ist der folgende Codeverwednet worden um die Datei in C++ zu lesen:

....

            // Lesen des Keys
            pAr->ReadString(Key);
            // Lesen des Datentyps
            VARTYPE vType;
            _variant_t vData;
            pAr->Read(&vType,sizeof(vType));
           // Aus Kompatibilitätsgründen händisch
          if (!loadSingleAttribute(pAr,vType,vData))
{
CAttributesCollection::Error(IDSERR_0007);
return E_FAIL;
}

.....

bool CAttributesCollection::loadSingleAttribute(CArchive *pAr, VARTYPE vType, _variant_t& value)
{
USES_CONVERSION;

// Lesen der Daten
switch (vType)
{
case VT_BSTR:
{
char *Buffer;
short len;
pAr->Read(&len,sizeof(len));
Buffer=new char[len+1];
pAr->Read(Buffer,len);
*(Buffer+len)='\0';
value=_variant_t(_bstr_t(Buffer));
delete[] Buffer;
break;
}
case VT_I4:
{
long lData;
pAr->Read(&lData,sizeof(lData));
value=_variant_t(lData,VT_I4);
break;
}
case VT_I2:
{
short iData;
pAr->Read(&iData,sizeof(iData));
value=_variant_t(iData,VT_I2);
break;
}
case VT_R8:
{
double dData;
pAr->Read(&dData,sizeof(dData));
value=_variant_t(dData,VT_R8);
break;
}
case VT_BOOL:
{
bool bData;
pAr->Read(&bData,sizeof(bData));
value=_variant_t(bData);
break;
}
case VT_DECIMAL:
{
DECIMAL decData;
pAr->Read(&decData,sizeof(decData));
value=_variant_t(decData);
break;
}
case VT_NULL:
value.vt=VT_NULL;
break; // Nichts weiter zu lesen
case VT_EMPTY:
value.vt=VT_EMPTY;
break; // Nichts weiter zu lesen
default:
return false;
}

return true;
}

......

Ich habe nun folgendes in C#:
        // Datei öffnen     
        System.IO.FileStream   fs       = new System.IO.FileStream this.Name,System.IO.FileMode.Open,System.IO.FileAccess.Read);
        System.IO.BinaryReader myReader = new System.IO.BinaryReader(fs);

        // Attribute der Datensicht einlesen
        long numAtts = myReader.ReadInt32();
        if (numAtts>0)
        {
          for (int AttsIndex=0;AttsIndex<numAtts;AttsIndex++)
          {
            // Lesen des Keys
            string Key = myReader.ReadString();

Die Anzahl wird denke ich noch richtig gelesen aber der erste String stimmt schon nicht mehr da is der Rest der Datei drinn. Ich hab mal im Hex-Editor nachgesehen nach dem String steht immer 0A ist das hier keine gültige Terminierung für den String? und wenn nein was muss ich nun machen anstatt. ODer muss ich ganz anders ans Werk gehen?

Mit bestem Dank im Voraus
Markus
 
Thema:

Datei binär lesen in C#

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben