Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在超过文件末尾的特定地址写入_C++_Visual Studio 2010_File Io_Stl_Fstream - Fatal编程技术网

C++ 如何在超过文件末尾的特定地址写入

C++ 如何在超过文件末尾的特定地址写入,c++,visual-studio-2010,file-io,stl,fstream,C++,Visual Studio 2010,File Io,Stl,Fstream,我正在使用一个fstream对象,我想知道如何能够在不必手动用零填充eof和所需位置之间的空间的情况下,在文件末尾写入内容 例如: fstream someFile; someFile.open("foo.dat", ios :: out | ios :: trunc | ios :: binary); // file is created, and empty someFile.seekp(100, ios :: beg); // expecting 100 zeroes to be writ

我正在使用一个
fstream
对象,我想知道如何能够在不必手动用零填充eof和所需位置之间的空间的情况下,在文件末尾写入内容

例如:

fstream someFile;
someFile.open("foo.dat", ios :: out | ios :: trunc | ios :: binary); // file is created, and empty
someFile.seekp(100, ios :: beg); // expecting 100 zeroes to be written in file, but nothing happens
someFile.write("yodelay-hee-hoo", 15); // file is still empty, does not work
我在这个问题上搜索了大约一个小时,但找不到任何相关的东西。我遇到的唯一一件事是有人说,使用
。seekp
ios::end
应该用零来填补空白,但我试过了,但它对我不起作用


如果有帮助的话,我将使用VS2010,本机编译。如果您能提供提示,非常感谢。

简短:
。如果以前使用
.seekg()
到达文件结尾,seekp()
将失败,因此需要事先调用
.clear()


长:

我发现我的写操作失败了,因为我首先用
.seekg()
查找了一个超过文件末尾的位置,并通过首先检查
.eof()
是否返回false,然后用
.peek()
查找非空字符来验证该位置是否有数据

问题是,即使
.seekg()
到达文件末尾,
.eof()
似乎总是返回false,直到尝试任何读取/peek/get操作,并且
.peek()
对于超过文件末尾的任何位置返回非空值(-1)


因此,解决方案是在检查是否到达文件结尾之前检查非空字符如果超过文件结尾,则在
之前调用
.clear()
。seekp()
,它解决了所有问题。

你说你想使用
ios::end
,但你的代码说
ios::beg
所以,seekp可能会将流设置为错误状态。错误是什么?你为什么不自己写这些零呢?它可能同样高效,并且会产生一个更加明确的代码。还是我遗漏了什么?但这对我不起作用-这是什么意思?它会产生错误吗?你不想用它吗?@KarthikT&@Björn:就我而言,使用
ios::beg
要容易得多,但我的意思是,我确实尝试了
ios::end
,但没有成功@海德:在
seekp
之后,错误状态为7,与
eofbit | failbit | badbit