逐行复制文件

时间:2014-03-22 16:19:35

标签: c++ loops while-loop eof

我遇到循环问题,我想要做的是逐行复制文件。 我使用了这段代码,但是在输出文件中又写了一个括号和一行。

void copyStringNewFile(ifstream& inData,ofstream& outData)
{
string x = "";

while (inData)
{
    getline(inData, x);
    outData << x << '\n';
}
}

可能我可以删除该行:

string x = "";

在有条件的情况下,我尝试了一些解决方案:

while (!inData.eof())    // Works similar to while (inData)

while (inData >> x)      // Delete a lot of lines

非常感谢你,如果你能解释eof在哪里有用(因为在循环中它似乎毫无用处)。

2 个答案:

答案 0 :(得分:3)

你可能想要:

while (getline(inData, x)) {
    outData << x << '\n';
}

您正在看到最后一行重复,因为您正在测试流,然后尝试从中读取;流“EOF”的状态仅在尝试 - 失败后 - 设置后才能设置。

答案 1 :(得分:2)

您没有检查getline()的返回值。如果失败,则不应复制。 顺便说一句,你也依赖于源文件中的最后一个'\ n',否则你将无法复制最后一行。

这是一个正确监控成功读取的表单:

void copyStringNewFile(ifstream& inData, ofstream& outData)
{
    char ch;
    while (inData >> ch)
    {
        outData << ch;
    }
}

或者,如果您准备使用更高级的表单:

void copyStringNewFile(ifstream& inData, ofstream& outData)
{
    outData << inData.rdbuf();
}