一位同事告诉我,这段代码:
std::ifstream stream(filename.c_str());
if (!stream)
{
throw std::runtime_error("..");
}
如果打开文件成功,ifstream
将返回0。他说这是错误的。我的代码可以工作,但我想找到文档看一下如何检查打开是否成功。你能指点我吗?
operator!
被重载 用于 std::ifstream
,所以你可以这样做。
但在我看来,这是一种非常糟糕的操作符重载滥用(由标准委员会决定)。如果你只是使用 if (stream.fail())
,你要检查的更加显式明确。
std::ifstream stream;
stream.exceptions(std::ios::failbit | std::ios::badbit);
stream.open(filename.c_str());
在这里,当failbit或badbit被设置时,流将抛出异常。例如,如果ifstream::open()失败,它会设置failbit并抛出异常。当然,如果流上设置了这些位中的任何一个,稍后也会抛出异常,因此此重写与初始示例不完全相同。您可以调用
stream.exceptions(std::ios::goodbit);
libc++abi: terminating with uncaught exception of type std::__1::ios_base::failure: ios_base::clear: unspecified iostream_category error
。 - Hugh Perkins
stream.bad()
、stream.good()
、stream.fail()
和stream.is_open()
。唉... - Inverse