filebuf以ios::in|ios::out方式打开文件,写入数据的字节数小于原数据而导致数据冗余的问题
在目前的项目里,因为文件被多个进程共享,于是有读写操作同时进行的要求,所以要修改文件时只能以ios::in|ios::out方式打开(ios::trunc将文件内容全部清空,导致其他进程读取文件失败)。但是在用ostream更新文件时,如果写入数据的字节数小于原数据,就导致更新后的文件里有冗余数据存在。比如原文件里的数据是greatwall,要更新为bigwall,则文件会被更新成bigwallll(9-7=2,残留最后2个字节)。请问有什么办法可以将文件里冗余的字节删除掉呢?
总结如下:
1. 用filebuf以ios::in|ios::out方式打开文件,并将文件内容全部读入内存
2. 对内存上的文件内容进行操作
3. 将操作后的数据重新写回文件,如果新数据的字节数小于原数据,则产生冗余数据。
即最后一个步骤产生问题。在现有的处理方式下,有什么解决方法呢?