2016-07-18 10 views
2

Ich möchte eine Strukturdaten in einer Binärdatei schreiben mit wfstram Klasse.Schreiben der Binärdatei mit wfstream

Warum Die Ausgabedatei ist leer?

Folgendes ist mein Code.

#include "stdafx.h" 
#include <string> 
#include <fstream> 

using namespace std; 

struct bin_data 
{ 
    wstring ch; 
    size_t id; 
}; 

int main() 
{ 

    wfstream f(L"test_bin_file.txt", ios::out | ios::binary); 
    bin_data *d = new bin_data; 
    d->id = 100; 
    d->ch = L"data100"; 
    f.write((wchar_t*)&d, sizeof(struct bin_data)); 
    f.close(); 

    return 0; 
} 
+0

Wenn Sie erwarten, könnten Sie String-Inhalte in einer Datei speichern, Sie sind falsch. Du bekommst nur Zeiger/Zähler gespeichert –

+0

Und du brauchst '& d' nicht, das ist einfach Mist –

+0

Also wie schreibe ich d? –

Antwort

2

Ich mag nicht viel mit großen Strömen zu arbeiten, wenn mit binären Daten handelt - binär sind letztlich Bytes, also Sie nicht viel über char vs wchar kümmern. Code schreibt unter 30 Bytes auf x64 - 8 für id, 8 für Länge und 14 (7 * 2) für String selbst

int main() { 
ofstream f(L"QQQ.txt", ios::out | ios::binary); 

bin_data *d = new bin_data; 
d->id = 100; 
d->ch = L"data100"; 

// ID first 
f.write((char*)&d->id, sizeof(d->id)); 
// then string length 
auto l = d->ch.length(); 
f.write((char*)&l, sizeof(l)); 
// string data 
f.write((char*)d->ch.data(), l*sizeof(wchar_t)); 

f.close(); 

return 0; 
} 
Verwandte Themen