假设我有一个包含几个数字的文件 input.txt
1 2
4 51
3 77
现在,我尝试执行此命令:
`string filename="input.txt";
ifstream ifs;
ifs.open(filename);
ifs>>x>>y;
fstream tmp("temp.txt",ios::out);
tmp<< ifs.rdbuf(); `
现在文件 temp.txt 看起来像
(empty space)
4 51
3 77
那么,这个空白是因为我没有读到行尾吗? “ifs”字符刚刚移动了两个整数,剩下的行尾被留下。 为什么在第一个文件中,我可以使用
循环ifs>>x>>y;
第二个(tmp)不是吗?另一方面,如果我手动创建带有空白空间的 temp.txt,上面的命令会立即起作用。为什么这不一致?
谢谢。
最佳答案
因为ifs >> x >> y;
不读取第一行数字后面的换行符。在这种特殊情况下,您可以通过添加 ifs.get()
来修复它。或类似的情况,但在一般情况下[例如如果文件是 1 2 <newline>
,文件中仍然会有一堆空格和换行符 - 只比没有 get
时少一个。调用,因此您必须读取输入文件并确定文件中的内容。
正如 Joachim 建议的那样,您可以使用 ignore
跳到下一个换行符,但同样,如果您有多个换行符,它不会真正有帮助。
关于c++ - 使用 rdbuf 复制文件并从文件中读取不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32314548/