提问人:Uwe_98 提问时间:4/6/2013 最后编辑:jrokUwe_98 更新时间:4/6/2013 访问量:96
多次使用同一文件流对象
Multiple use of same file streaming object
问:
我编写了以下源代码:
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赞
jrok
4/6/2013
#1
您可能已对设置一个或多个错误标志的流进行了处理,例如 .eofbit
关闭流不会清除其错误标志,您必须手动执行。关闭后调用。leggiFile.clear();
从 C++11 开始,这是由 自动完成的。如果您已经在使用 C++11 编译器,那么您的问题出在其他地方(不能说在哪里,您没有显示足够的代码)。open()
评论
0赞
Pete Becker
4/6/2013
从 C++11 开始,成功调用 将调用 .open
clear
0赞
jrok
4/6/2013
@PeteBecker不知道,谢谢。我更新了 A 以明确这一点。
0赞
Uwe_98
4/7/2013
亲爱的jrok,非常感谢你。它发挥了不可估量的作用。我正在使用可视化 C++ 2008 Express 版本。有了它,它也可以编写纯 C++ 代码。我不知道 C++ 编译器的版本。
0赞
pcbabu
4/6/2013
#2
了解日志记录或对任何文件进行任何多次访问的设计模式。您还可以使用互斥锁,以便等待文件等资源的代码。但是同时使用同一个文件是不明智的。文件可以打开一个 lyfecycle 的代码循环。这不是问题。singleton
评论
0赞
Uwe_98
4/7/2013
也许我没有很好地表达自己。我打开了一个文件,然后关闭了它,打开了另一个具有相同流的文件。无论如何,我的问题通过使用stream.clear()解决了。谢谢。
下一个:C++。1参数变化的类
评论