2016-04-18 18 views
1

Ich versuche, in Datei im Binärmodus anhängen, aber die Logik unten funktioniert nicht.
Bei Pdf-Dateien wird die Datei beschädigt und bei Textdateien werden zusätzlich zu meinen Dateiinhalten einige Junk-Daten hinzugefügt.
Meine Variable m_strReceivedMessage ist vom Typ std::string.Datei schreiben und anhängen im Binärmodus funktioniert nicht

std::ofstream out(file, std::ios::binary | std::ios_base::app); 
int i = sizeof(m_strReceivedMessage); 
if (out.is_open()) { 
    // out.write(m_strReceivedMessage.c_str(), m_strReceivedMessage.size()); 
    //out << m_strReceivedMessage; 
    out.write(reinterpret_cast<char *>(&m_strReceivedMessage), m_strReceivedMessage.size()); 
} 
+0

Versuchen Sie 'out.write (reinterpret_cast (& m_strReceivedMessage.data()), m_strReceivedMessage.size()); ' –

+1

Was war los mit Ihrer ersten auskommentierten Version? Oder dein zweites? – Barry

Antwort

1

Sie drucken den Speicher des std::string Objekt, anstatt den Zeichenpuffer, die es enthält. Um einen Zeiger auf den Zeichenpuffer zu erhalten, siehe die data() Elementfunktion. Tipp: Die Tatsache, dass Sie std::string* mit reinterpret_cast<char*> casten müssen, ist ein totales Werbegeschenk, dass Sie etwas sehr falsch machen.

Auch ich bin nicht vertraut mit der PDF-Spezifikation, aber ich vermute, dass es möglicherweise keine Bytes enthalten. Und je nachdem, wie Sie Ihre std::string bekommen, ist es möglich, dass Sie nach dem ersten Nul keinen Inhalt mehr verpasst haben. std::vector<char> wäre geeigneter Weg, um binäre Daten zu speichern.