以二进制模式写入和追加文件无效

时间:2016-04-18 16:41:40

标签: c++ binaryfiles

我试图以二进制模式追加到文件中,但下面的逻辑不起作用 对于Pdf文件,文件已损坏,对于文本文件,除了我的文件内容外,它还添加了一些垃圾数据。
我的变量m_strReceivedMessage的类型为std::string

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());
} 

1 个答案:

答案 0 :(得分:1)

您正在打印std::string对象的内存,而不是它包含的字符缓冲区。要获取指向字符缓冲区的指针,请参阅data()成员函数。提示:你需要使用std::string*施放reinterpret_cast<char*>是一个死的赠品,你做错了。

另外,我不熟悉PDF规范,但我怀疑它可能包含nul字节。根据您获得std::string的方式,您可能在第一个之后错过了任何内容。 std::vector<char>是存储二进制数据的更合适的方法。