如何解决是什么导致 0 和 1 被写入新文件的末尾? C++
我在工作中使用两个不同的 txt 文件来完成一项任务。其中一个会在我需要给某人回电时更新 (callback.txt),另一个会更新所有在一天结束时尚未完成的回调 (recap.txt)。我编写了一个基本的 Python 程序以及一个 PowerShell 脚本,它在一天结束时通过将前一天的最新条目添加到 recap.txt 的顶部来更新 recap.txt。
现在,我试图用 C++ 编写它只是为了获得一些该语言的经验,但我似乎无法找到我遇到这个问题的原因。一切都按预期工作,除了“recapNEW.txt”写入了 0 和 1 并且每个文件的末尾都在单独的行上。例如:
callback.txt:
----------
here's something
here is something else
yadda yadda
recapOLD.txt
----------
old news
still need it though
so we keep it around
recapNEW.txt (blank)
----------
并且,在运行程序之后:
recapNEW:
----------
here's something
here is something else
yadda yadda
old news
still need it though
so we keep it around
0
1
这是我写的:
#include<fstream>
#include<iostream>
#include<string>
void update () {
std::ifstream callback("callback.txt");
std::ifstream recapBAK("recapBAK.txt");
std::ofstream recapNEW("recapNEW.txt");
std::string callLine;
std::string bakLine;
if (!callback || !recapNEW || !recapBAK) {
std::cerr << "Could not open needed files. Exiting.";
std::exit(1);
}
while (std::getline ( callback,callLine )) {
recapNEW << callLine << std::endl ;
}
while (std::getline ( recapBAK,bakLine )) {
recapNEW << bakLine << std::endl ;
}
recapNEW << callback << std::endl << recapNEW << std::endl ;
callback.close();
recapBAK.close();
recapNEW.close();
}
我将 recap.txt 文件拆分为两个单独的文件(“recapBAK.txt”和“recapNEW.txt”)以保留前一天回顾的副本,并在单独的函数中更新它(在下面发布),但是我已经缩小范围,就是上面的函数将额外的数字写入文件末尾。
void backup () {
std::ofstream backup("recapBAK.txt");
std::ifstream today("recapNEW.txt");
std::string todayLine;
while (std::getline (today,todayLine)) {
backup << todayLine << std::endl;
}
backup.close();
today.close();
}
最让我困惑的是,我没有看到我在第一个函数中做了什么不同的事情,导致整数被标记到文件的末尾,因为没有额外的整数被添加到更新的recapUSED 版本。
如果这还不够清楚,请见谅,我第一次撞墙,以至于我在论坛上发帖大声笑。感谢您的帮助,我是自学的,喜欢与他人合作,看看我可以/应该改进的地方。
解决方法
我认为问题在于:
recapNEW << callback << std::endl << recapNEW << std::endl ;
...您正在尝试将流 callback
和 recapNEW
的内容输出到 recapNEW
,但它不能那样工作。而是输出文件流的布尔“良好”状态。准备一个流并不那么简单。
实际上,如果没有那条线,您似乎就拥有了所需的东西。您是否尝试将其删除?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。