http://zhidao.baidu.com/question/375750820.html
C++ 将数据写入二进制文件后,第二次打开文件修改部分数据,怎么前一次写入的数据被删除了。这是我的文件打开模式outfile.open(filename.c_str(),ofstream::out|ofstream::binary);
问题补充:
将读取模式换为outfile.open(filename.c_str(),ofstream::binary|ofstream::in|ofstream::out); 就可以直接修改了,应该多看看书。
满意回答
2012-02-08 15:37
打开方法有问题,out方法如果原来文件存在会清空原来文件中的内容,如果文件不存在会新建该文件。你仔细看看书吧,有关流文件的输入输出。建议先将文件的内容读取再做修改
ofstream的flush()函数问题
m_pstream->seekp(m_header.fContentOffset, ios::beg);
m_pstream->write((const char*)p, len);
m_pstream->flush();
int posEnd = m_pstream->tellp();
int iWrtLen = posEnd - m_header.fContentOffset;
assert(iWrtLen == len);
return !m_pstream->fail();
找到文件的结构头m_header.fContentOffset,然后从其后写入len长度的字节,发现flush后,实际写入的比要求写入的还多,怎么回事?Len = 288404128 bytes,m_header.fContentOffset=13032 bytes,而 iWrtLen = 288404239,多出了100多个字节。
m_pstream->write((const char*)p, len);
m_pstream->flush();
int posEnd = m_pstream->tellp();
int iWrtLen = posEnd - m_header.fContentOffset;
assert(iWrtLen == len);
return !m_pstream->fail();
找到文件的结构头m_header.fContentOffset,然后从其后写入len长度的字节,发现flush后,实际写入的比要求写入的还多,怎么回事?Len = 288404128 bytes,m_header.fContentOffset=13032 bytes,而 iWrtLen = 288404239,多出了100多个字节。