多次使用同一文件流对象

Multiple use of same file streaming object

提问人:Uwe_98 提问时间:4/6/2013 最后编辑:jrokUwe_98 更新时间:4/6/2013 访问量:96

问:

我编写了以下源代码:

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

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

C++ 文件流

评论


答:

2赞 jrok 4/6/2013 #1

您可能已对设置一个或多个错误标志的流进行了处理,例如 .eofbit

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

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

评论

0赞 Pete Becker 4/6/2013
从 C++11 开始,成功调用 将调用 .openclear
0赞 jrok 4/6/2013
@PeteBecker不知道,谢谢。我更新了 A 以明确这一点。
0赞 Uwe_98 4/7/2013
亲爱的jrok,非常感谢你。它发挥了不可估量的作用。我正在使用可视化 C++ 2008 Express 版本。有了它,它也可以编写纯 C++ 代码。我不知道 C++ 编译器的版本。
0赞 jrok 4/7/2013
@Uwe_98 很高兴它有帮助。在 Stack Overflow 上,接受对您有帮助的答案是常见的礼貌(接受答案的工作原理)。顺便说一句,C++11 是纯 C++,它只是指该语言的特定版本的 ISO 标准。在此处阅读更多内容。格雷茨。
0赞 pcbabu 4/6/2013 #2

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

评论

0赞 Uwe_98 4/7/2013
也许我没有很好地表达自己。我打开了一个文件,然后关闭了它,打开了另一个具有相同流的文件。无论如何,我的问题通过使用stream.clear()解决了。谢谢。