我有一个已经包含一些数据的文件(比如 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。