0
#include <iostream> 
#include <fstream> 
#include <cstdlib>

using namespace std;

int main(int argc, char *argv[]) 
{ 
    ifstream is; 
    is.open(argv[1]);
    ofstream outfile;
    outfile.open(argv[2]);
    char ch; 
    while (1) 
    { 
         ch = is.get();   // this is where test.txt is supposed
         outfile.put(ch); // to be copied to test2.txt
         if (is.eof()) 
             break; 
         cout << ch;  //this shows
    }

    is.close();
    outfile.close();

    ifstream outfile2;
    outfile2.open(argv[2]); 
    char ch2; 
    while (1)
    { 
       ch2 = outfile2.get(); 
       if (outfile2.eof()) 
         break; 
       cout << ch2;  //this doesnt
    }        
        outfile2.close();

        system("PAUSE"); 
        return 0; 
    }

我通过 cmd 运行它,给它 2 个参数 test.txt test2.txt 并输出我在 cmd 中的 test.txt 中写的内容,但 test2.txt 由于某种原因仍然为空?

4

2 回答 2

1

请检查流状态,不仅是 eof(),还要检查失败。此外,在读取最后一个字符后,即使该字符已成功读取,如果流状态为 EOF 也很常见。因此,总是尝试读取一个元素,如果它成功了,然后才使用该元素:

ifstream in(argv[1]);
ofstream out(argv[2]);
char c;
while(in.get(c))
    out.put(c);

为了使其真正有效,请使用以下方法:

out << in.rdbuf();

在任何情况下,检查流状态是否成功:

if(!in.eof())
    throw std::runtime_error("failed to read input file");
if(!out.flush())
    throw std::runtime_error("failed to write output file");
于 2013-05-22T19:04:02.183 回答
0

对我来说,它不是空白,而是带有一些额外的附加字符。这是因为您在检查 eof() 之前将从旧文件中获得的字符写入新文件。

从一个文件写入另一个文件的代码应更改为

while (1) 
    { 
         ch = is.get();
         if (is.eof()) 
             break; 
         outfile.put(ch);
         cout << ch;  //this shows
    }
于 2013-05-22T18:20:20.900 回答