【问题标题】:Copy file line by line逐行复制文件
【发布时间】:2014-04-30 02:03:02
【问题描述】:

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

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

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

也许我可以删除该行:

string x = "";

在while条件下我尝试了一些解决方案:

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

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

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

【问题讨论】:

  • 感谢所有我使用过的人:outData &lt;&lt; inData.rdbuf(); 最后一个问题,为什么如果我将 getline 函数置于 while 条件下,它将被执行而不仅仅是评估。再次感谢:D!

标签: c++ loops while-loop eof


【解决方案1】:

你可能想要:

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

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

【讨论】:

    【解决方案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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-18
      • 2011-04-06
      • 2022-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-17
      • 2020-09-05
      相关资源
      最近更新 更多