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

标签 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 看起来像

(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/

相关文章:

c++ - 为什么二维Array中的Range for要这样写?

c++ - 三个简单的makefile问题

c++ - 以相反的顺序从文本文件中读取行 C++

c++ - 使用 ifstream 而不是 FILE

C++ std::ifstream 读取字符串定界符

C++ 原子对象无锁保证

c++在内存中使用缓冲区而不是直接读取文件

c++ - 二进制文件写入后读取负整数

c++ - 我只能从一个文件访问静态 fstream

c++ - 如何读取文本文件的第 2、3 和 4 行。 C++