使用rdbuf复制文件并从文件中读取不一致的文件?

时间:2015-08-31 15:16:27

标签: c++ fstream ifstream ostream

假设我有几个数字的文件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看起来像

  

(空白区)
  4 51
  3 77

所以,这是空的空间,因为我没有读到行尾吗? &#34; IFS&#34; ponter刚刚被移动了两个整数,剩下的线路终止了。 为什么在第一个文件中,我可以使用

循环

ifs>>x>>y;

而在第二个(tmp)没有?另一方面,如果我手动创建具有空白空间的temp.txt,则上面的命令会立即生效。为什么这不一致?

感谢。

2 个答案:

答案 0 :(得分:2)

输入操作符,例如字符串和数字(​​整数和浮点数),跳过前导空格。

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

答案 1 :(得分:2)

因为ifs >> x >> y;在第一行的数字后没有读取换行符。您可以通过添加ifs.get()或其他类似内容来修复此特定情况,但在通用情况下[例如如果文件是1 2 <newline>,文件中仍然会有一堆空格和换行符 - 只比没有get调用时少一个,所以你必须阅读输入文件并确定文件中的内容。

正如Joachim建议的那样,您可以使用ignore跳到下一个换行符,但如果您有多个换行符,它将再次获得帮助。