C++ 将数据写入二进制文件后,第二次打开文件修改部分数据,怎么前一次写入的数据被删除了。

C++ 将数据写入二进制文件后,第二次打开文件修改部分数据,怎么前一次写入的数据被删除了。


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多个字节。


































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值