我注意到在我的C ++代码中,无论何时关闭std::ofstream
对象,我都无法重新打开我用std::ifstream
关闭的文件。 std::ifstream
的{{1}}函数将始终失败。
我能做些什么'额外'来确保我的std :: ofstream对象正确关闭?
有人可能会要求查看我的具体代码,所以为了保持这个帖子的小,我已经把它贴了here。在运行案例a或d后,我的代码中所有open
开放调用都失败了。 (在发布此问题之前,我有几个人玩我的代码除了std::ifstream
因未知原因关闭失败之外无法得出任何结论)
提前感谢收到的所有回复。
代码是
std::ofstream
答案 0 :(得分:3)
确保在此处理中的每个点重置流的最佳方法不是显式关闭它们,而是在使用点声明它们并允许它们超出范围。这是评论中提出的RAII点。在您的情况下,这意味着将声明从函数顶部移动到交换机的每个臂内部。通过这种方式,您可以确保在退出特定case
时完全关闭每个文件,因为ofstream和ifstream在范围退出时销毁期间关闭文件。
我注意到的另一件事是你在文件打开后测试一个奇怪的东西:
fin.open("address.txt");
if(!fin)
这测试了一个糟糕的流,但我不认为它是完整的 - 如果你正在测试成功打开,你还应该测试
fin.open("address.txt");
if (!fin.is_open())
所有文件处理循环和open()
调用都需要检查fin.fail()
或fout.fail()
以及fin.eof()
,以排除文件访问错误为未处理的条件这会混淆你观察到的行为。
此时,我建议你解决这些明显的误解,如果你无法解决这些问题,请回过头来提出更具体的问题。