c++ - 二进制模式下的文件写入和附加不起作用

标签 c++ binaryfiles

我正在尝试以二进制模式追加到文件中,但下面的逻辑不起作用。
对于 Pdf 文件,文件已损坏,对于文本文件,除了我的文件内容外,它还添加了一些垃圾数据。
我的变量 m_strReceivedMessagestd::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());
} 

最佳答案

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

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

关于c++ - 二进制模式下的文件写入和附加不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36699694/

相关文章:

c++ - 如何打印子矩阵?

c++ - 进程挂起,PIPE 被阻塞

java - 使用相对路径保存我的二进制文件找不到路径

c - 如何在二进制 gtk 应用程序中嵌入 `.ui` 文件?

Git 检查问题 [致命 : early EOFs]

c++ - Typeid()检查模板化函数的传递参数

c++ - cv::Mat 在 Visual C++ Express 2010 中给出错误

c++ - 不使用线程的并行 while 循环

io - 在 Nim 中写入/读取二进制文件

linux - 如何在二进制文件中定位字符串? (不,不是 strings 命令。)