为何调用std::fstream::write()后tellg()值会发生变化?
为什么fstream执行write后tellg()会变化?
你遇到的这个情况是C++标准对双向文件流(std::fstream)的规定导致的:
- 当你同时以
in | out | trunc模式打开文件时,文件被截断为0长度,此时读位置指针(由tellg()返回)和写位置指针(由tellp()返回)是共享同一个位置的,两者不会独立存在,除非你执行了读/写切换操作或者手动调整指针位置。 - 调用
write()写入2个字节后,写位置指针会移动到写入完成后的偏移位置(也就是2),由于此时读写指针处于共享状态,读位置指针也会同步更新到这个位置,所以tellg()返回的数值会变成2,哪怕你没有执行任何读操作。
如果后续你执行读操作,或者调用seekg()/seekp()单独调整其中一个指针的位置,两个指针才会分离,各自维护独立的位置。
内容的提问来源于stack exchange,提问作者Trauer
相关产品推荐
相关产品推荐

