如何在文件末尾的特定地址写入

时间:2012-12-07 07:42:59

标签: 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 written in file, but nothing happens
someFile.write("yodelay-hee-hoo", 15); // file is still empty, does not work

我一直在搜索这个问题大约一个小时,但我找不到任何相关的东西。我遇到的唯一一件事就是说使用.seekpios :: end的人应该用零填补空白,但我尝试了它并不适用于我。

如果有帮助,我会使用VS2010本机编译。如果你能提供一个提示,那么非常感谢。

1 个答案:

答案 0 :(得分:1)

简短 .seekp()如果先前已与.seekg()达成文件结尾,则会失败,因此需要事先致电.clear()


<强>长:

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

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

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