Binäre Datei nur zum lesen öffnen.

newpipe

Grünschnabel
Hallo,
ich sollte in einem Programm ein Konfigurationsfile zum Lesen öffnen.
Zum einen beinhaltet das File eine gewisse Magic Number ganz am Anfang, anhand welcher festgestellt werden sollte, dass diese Datei die richtige ist. Zum Anderen stehen in dieser Datei auch verschiedene unsigned char welche die eigentlichen Informationen sind.
Ich habe es mal mit dem folgenden versucht:
Code:
  ifstream file ("example.conf", ios::in|ios::binary|ios::ate);
  if (file.is_open())
  {
    int size;
    size = (int) file.tellg();
    memblock = new char [size];
    file.seekg (0, ios::beg);
    file.read (memblock, size);
    file.close();
    
    cout << "the complete content is in memory";
    
    delete[] memblock;
  }
  else cout << "Unable to open file";
Leider bin ich aber noch nicht wirklich auf einen grünen Zweig gekommen. Ich lese ja verschiedene Informationen ein, die dann extrahiert werden sollten.

Wäre super, wenn mir jemand von euch einen Tipp geben könnte.

MfG,
newpipe
 
Moin,

und willkommen bei Tutorials.de ;)

Was ist denn genau Deine Frage?
Das habe ich jetzt nicht ganz verstanden!

gruß
Klaus
 
Einmal danke für deine Antwort.
Meine Frage ist nun, wie kann ich aus der Datei einzelne Inhalte extrahieren und sie gesondert abspeichern, sodass ich im Nachhinein auf die unterschiedlichen Bereiche des Inhaltes zugreifen kann.
Der Inhalt sieht folgendermaßen aus:

-->char[4]
beinhaltet die "Magic Number"
-->unsigned char
-->unsigned char
-->unsigned char[8][2][2]
-->unsigned char[höhe][breite]

MfG,
newpipe
 
Hallo,

mal so aus dem Bauch raus (ungetestet) :
Code:
char cMagicNumber[5];
memcpy( cMagicNumber, memblock[0], 4); // kopiert die ersten vier Zeichen
cMagicNumber[4] = 0;

char cVar1 = memblock[4];
char cVar2 = memblock[5];

usw.

und das Ganze natürlich VOR dem "delete" ....

Gruß
Klaus
 
wenn du das file lesen willst, warum übergibst du dan den modus ate? steht das nicht für at the end? wen du da anfängst zu lesen macht das wenig sinn. oder wird dieses attribut übergangen bei dem modus in?
 
Ich gehe zuerst mal ans Ende um die Filegröße herauszufinden. Anschließend gehe ich mit
Code:
file.seekg (0, ios::beg);
wieder an den Anfang
 
Hm also es ist die Frage ob es sich wirklich lohnt, dass du hingehst und den kompletten Inhalt einließt ... einfacher wäre es mit read ... und ansonsten ...
C++:
template<typename _ResultT>
const _ResultT read(const unsigned char* ptr_array, std::size_t& pos, const std::size_t size)
{    
    const std::size_t size_of(sizeof(_ResultT));
    pos += size_of;
    return *reinterpret_cast<const _ResultT*>(ptr_array[pos - size_of]);
 }

C++:
unsigned char* ptr_array = /* zeiger auf Dateiinhalt */;
std::size_t position(0);
read(ptr_array, position, /* länge des dateiinhaltes */);
so kannst du auf die Werte zugreifen ... muss das ? :D
 
Zurück