我写了以下源代码:
ifstream leggiFile;
leggiFile.open("Questions.txt",ios::in);
if (!leggiFile.good())
{
cerr << "\n\n\n\tErrore during file opening Questions.txt\n\n\n" << endl;
}
else
{
// ...
};
leggiFile.close();
system("pause");
现在我想使用相同的对象来处理第二个文件。
leggiFile.open("Answers.txt",ios::in);
i=0;
if(!leggiFile.good())
{
cerr << "\n\n\n\tError during opening of file answers.txt\n\n\n" << endl;
}
else
{
// ...
}
问题:第二次无法打开文件并显示错误消息。为什么? 你能告诉我一个解决方案吗?
答案 0 :(得分:2)
您可能已经在设置了一个或多个错误标记的流上完成了工作,例如eofbit
。
关闭流不会清除其错误标志,您必须手动执行此操作。关闭后请致电leggiFile.clear();
。
从C ++ 11开始,这是由open()
自动完成的。如果您已经在使用C ++ 11编译器,那么您的问题就在其他地方(不能说在哪里,您没有显示足够的代码)。
答案 1 :(得分:0)
了解用于记录的singleton
设计模式或对任何文件的任何多次访问。您还可以使用Mutex锁定,以便等待代码来获取文件等资源。但同时使用同一文件并不明智。文件可以打开以进行代码的循环。这不是问题。