使用rbuf复制文件,从文件中读取不一致

Copying file with rdbuf and inconsitent reading from the file?

本文关键字:文件 读取 不一致 rbuf 复制 使用      更新时间:2023-10-16

假设我有一个文件input。txt,里面有几个数字


1 24 51
77

现在,我正试图执行这个命令:

`string filename="input.txt";     
ifstream ifs;     
ifs.open(filename);      
ifs>>x>>y;       
fstream tmp("temp.txt",ios::out);      
tmp<< ifs.rdbuf();    `
现在文件temp.txt看起来像

(空白)4 51
77

那么,这个空格是因为我没有读到行尾吗?"ifs"ponter只是移动了两个整数,剩下的行尾被留下。为什么在第一个文件中,我可以循环使用

ifs>>x>>y;

和第二个(tmp) not?另一方面,如果我用空白的空间手动创建temp.txt,上面的命令立即工作。为什么这是矛盾的?

谢谢。

因为ifs >> x >> y;不读取第一行数字后面的换行符。你可以通过添加ifs.get()或一些这样的特殊情况来修复它,但在一般情况下[例如,如果文件是1 2 <newline>,仍然会有一堆空格和一个换行符在文件中-只比没有get调用少一个,所以你必须读取输入文件并确定文件中有什么。

正如Joachim所建议的,您可以使用ignore跳到下一个换行符,但是,如果您有多个换行符,它将不会真正有帮助。

当读取字符串和数字(整数和浮点数)时,输入操作符会跳过前导空格。

如果您想在读取前两个数字后删除尾随空格,只需执行ignore,直到行尾。