C++ primer plus 第17 章 输入、输出和文件:文件输入和输出01
17.4.2 流状态检查和is_open()
17.4.3 打开多个文件
17.4.4命令行处理技术
程序清单17.17 count.cpp
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
17.4.2 流状态检查和is open()
C++文件流类从iosbase 类那里继承了一个流状态成员。正如前面指出的,该成员存储了指出流状态的信息:一切顺利、已到达文件尾、I/0 操作失败等。如果一切顺利,则流状态为零(没有消息就是好消息)。其他状态都是通过将特定位设置为1来记录的。文件流类还继承了iosbase 类中报告流状态的方法,表17.4对这些方法进行了总结。可以通过检查流状态来判断最后一个流操作是否成功。对于文件流,这包括检查试图打开文件时是否成功。例如,试图打开一个不存在的文件进行输入时,将设置ilbit位,因此可以这样进行检查:
fin.open(argv[file]):
if (fin.fail())// open attempt failed
{
...
}
由于 ifstrcam 对象和 istrcam 对象一样,被放在需要 bool类型的地方时,将被转换为 bool值,因此您也可以这样做:
fin.open(argvlfile]);
if (!fin)//open attempt failed
{
...
}
。
然而,较新的C++实现提供了一种更好的检查文件是否被打开的方法–is_open()方法:
if(!fin.is open())//open attempt failed
{
...
}
这种方式之所以更好,是因为它能够检测出其他方式不能检测出的微妙问题,接下来的“警告”将讨论这一点。
警告:以前,检查文件是否成功打开的常见方式如下: