二进制模式下的文件写入和附加不起作用
File writing and appending in Binary mode not working
我正在尝试以二进制模式追加到文件中,但下面的逻辑不起作用。
对于 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());
}
您正在打印 std::string
对象的内存,而不是它包含的字符缓冲区。要获取指向字符缓冲区的指针,请参阅 data() 成员函数。提示:你需要使用 reinterpret_cast<char*>
来转换 std::string*
的事实是你正在做一些非常错误的事情。
此外,我不熟悉 PDF 规范,但我怀疑它可能包含 nul 字节。根据您获取 std::string
的方式,您可能会错过第一个 nul 之后的任何内容。 std::vector<char>
是存储二进制数据更合适的方式。
我正在尝试以二进制模式追加到文件中,但下面的逻辑不起作用。
对于 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());
}
您正在打印 std::string
对象的内存,而不是它包含的字符缓冲区。要获取指向字符缓冲区的指针,请参阅 data() 成员函数。提示:你需要使用 reinterpret_cast<char*>
来转换 std::string*
的事实是你正在做一些非常错误的事情。
此外,我不熟悉 PDF 规范,但我怀疑它可能包含 nul 字节。根据您获取 std::string
的方式,您可能会错过第一个 nul 之后的任何内容。 std::vector<char>
是存储二进制数据更合适的方式。