Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Binärdatei schreiben klappt nicht

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
10.11.2008, 17:21 Uhr
~2chilled
Gast


Bin kurz vorm verzweifeln:

C++:
ofstream os;
    //ofstream os((Files::filePath + filename).c_str(), mode);
    os.open((Files::filePath + filename).c_str(), ios_base::binary);
    os << Files::character << endl;
    os << Files::integer << endl;
    os << Files::float_number << endl;
    os << Files::astring << endl;
    
    os.close();



Er schreibt mir die gewünschte Datei, aber leider nicht binär, sondern im Plain Text Modus. Habe auch schon das bitflag ios::binary probiert, gleiches Ergebnis. Was mache ich falsch??
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.11.2008, 17:37 Uhr
0xdeadbeef
Gott
(Operator)


Das binary-Flag sorgt lediglich dafür, dass das Betriebssystem den Kram so in die Datei schreibt, wie das Programm es ihm gibt. Unter Windows bedeutet das zum Beispiel, dass Newlines nicht durch \r\n ersetzt werden.

Was du hier haben willst, ist wahrscheinlich

C++:
os.write(&Files::character, sizeof(Files::character));
os.write(&Files.integer, sizeof(Files::integer));
// usw.


...allerdings ist das nur begrenzt eine sinnvolle Weise, Daten zu speichern, weil sie plattformabhängig ist. Frag Wikipedia nach Bytesex für mehr Informationen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.11.2008, 17:56 Uhr
~2chilled
Gast


ostream& write( const char* buffer, streamsize num );

die Methode ist doch nur für const char * definiert, nicht für Integer, Float, etc.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.11.2008, 18:27 Uhr
0xdeadbeef
Gott
(Operator)


Du willst den Kram ja als flachen Speicherbereich rausschreiben. Es kann sein, dass du den Kram explizit static_casten musst, aber um Kram als flachen Speicherbereich rauszuschreiben, ist ostream::write die Funktion, die du willst.

Oh, und du musst mit komplexen Datentypen aufpassen - Zeiger werden ebenso flach rausgeschrieben wie virtuelle Funktionstabellen und überleben das Einlesen nachher im Zweifel nicht.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: