0

我编写了以下源代码:

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
{
    // ...
}

问题:第二次无法打开文件并出现错误消息。为什么?你能建议我一个解决方案吗?

4

2 回答 2

2

您可能已经在流上完成了设置一个或多个错误标志的工作,例如eofbit.

关闭流并不会清除其错误标志,您必须手动进行。leggiFile.clear();关闭后调用。

不过,从 C++11 开始,这是由 自动完成的open()。如果您已经在使用 C++11 编译器,那么您的问题就在其他地方(不能说在哪里,您没有显示足够的代码)。

于 2013-04-05T18:44:33.667 回答
0

了解singleton日志记录或对任何文件的任何多次访问的设计模式。您还可以使用互斥锁,以便代码等待文件等资源。但是同时使用同一个文件是不明智的。可以为代码的生命周期打开文件。这不是问题。

于 2013-04-05T19:12:36.530 回答