多次使用相同的文件流对象

时间:2013-04-05 18:36:15

标签: c++ filestreams

我写了以下源代码:

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

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

2 个答案:

答案 0 :(得分:2)

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

关闭流不会清除其错误标志,您必须手动执行此操作。关闭后请致电leggiFile.clear();

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

答案 1 :(得分:0)

了解用于记录的singleton设计模式或对任何文件的任何多次访问。您还可以使用Mutex锁定,以便等待代码来获取文件等资源。但同时使用同一文件并不明智。文件可以打开以进行代码的循环。这不是问题。