我的代码如下。缓冲区有数据,但fout2.write没有做任何事情。文件已创建且为空。
ofstream fout2(fname, ios::binary);
fout2.open(fname, ios::binary | ios::in | ios::out);
if (fout2.is_open()) {
//problem is here //write the buffer contents
fout2.write(rmsg.buffer, rmsg.length);
fout2.flush();
memset(rmsg.buffer, 0, sizeof(rmsg.buffer)); //clear the buffer
答案 0 :(得分:1)
您可能忘记关闭该文件。您可以通过
来完成fout2.close()
或者只是关闭fout2的范围:
{
ofstream fout2(fname, ios::binary);
fout2.open(fname, ios::binary | ios::in | ios::out);
if (fout2.is_open()) {
fout2.write(rmsg.buffer, rmsg.length);
//out2.flush(); // no need for this
memset(rmsg.buffer, 0, sizeof(rmsg.buffer)); //clear the buffer
}
}
答案 1 :(得分:1)
如果您计划同时使用ios::in
所暗示的输入和输出,则应使用fstream
,而不是ofstream
。然后你应该在构造函数中传递所有打开的模式,而不需要调用open()
。
fstream fout2(fname, ios::binary | ios::in | ios::out);