我有一个文件已经包含了一些数据(比如说,8 kB)。我想要从文件的开头读取一些内容,然后从读取结束的位置开始覆盖数据。所以我尝试使用以下代码:
std::fstream stream("filename", std::ios::in | std::ios::out | std::ios::binary);
char byte;
stream.read(&byte, 1);
// stream.seekp(1);
int bytesCount = 4096;
auto bytesVec = std::vector<char>(bytesCount, 'c');
char* bytes = bytesVec.data();
std::cout << stream.bad() << std::endl;
stream.write(bytes, bytesCount);
std::cout << stream.bad() << std::endl;
如果我运行这段代码,第一个 bad()
返回 false
,但第二个返回 true
,实际上什么也没有被写入。
如果我将 bytesCount
减少到小于 4096(大概是某个内部缓冲区的大小),第二个 bad()
返回 false
,但仍然没有任何东西被写入。
如果我取消注释 seekp()
行,写入操作开始工作: bad()
返回 false
并且字节确实被写入。
为什么此处需要 seekp()
?为什么不使用它就无法工作?使用 seekp()
是正确的方法吗?
我正在使用 Windows 7 上的 Visual Studio 2012。