我有一个循环问题,我想做的是逐行复制一个文件。 我使用了这段代码,但它在输出文件中多写了一个括号和一行。
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在哪里有用(因为在循环中它似乎没用)。
最佳答案
您没有检查 getline() 的返回值。失败时,不应复制。 顺便说一句,你还依赖于源文件中的最后一个 '\n',否则你将无法复制最后一行。
这是一个正确监控成功读取的表单:
void copyStringNewFile(ifstream& inData, ofstream& outData)
{
char ch;
while (inData >> ch)
{
outData << ch;
}
}
或者,如果您准备好使用更高级的表单:
void copyStringNewFile(ifstream& inData, ofstream& outData)
{
outData << inData.rdbuf();
}
关于c++ - 逐行复制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22580191/