ifstream :: is_open vs ifstream :: fail? [英] ifstream::is_open vs ifstream::fail?
问题描述
读取Savitch的 std :: ifstream :: fail
作为示例显示,以检查文件是否正确打开( ifstream
或 ofstream
)。
Reading Savitch's Problem Solving in C++, std::ifstream::fail
is shown as an example to check if a file has been correctly opened (ifstream
or ofstream
).
ve以前使用,因为它是我第一次显示, std :: ifstream :: is_open
执行相同的检查。
I've previously used, as it is what I was first shown, std::ifstream::is_open
to perform the same check.
这是更好的做法?
或者在尝试打开后直接调用任何一个的情况下,它没有实际差别吗? p>
Or in the case that either one is called directly after attempting to open, does it make no practical difference?
推荐答案
简介
std :: ifstream: :fail
包括检查 std :: ifstream :: is_open
,但 std :: ifstream :: is_open
只检查是否可以创建文件的句柄。
INTRODUCTION
std::ifstream::fail
includes checking std::ifstream::is_open
, but std::ifstream::is_open
only checks if it was possible to create a handle to the file.
std :: ifstream :: fail
可以返回 true :ifstream :: is_open 返回 true ;它们不是互相排斥的。
std::ifstream::fail
can return true, even if std::ifstream::is_open
returns true; they are not the mutually exclusive.
.fail
将检查整体health >,这涉及诸如检查流当前进入了失败状态以尝试读取无效值,而 .is_open
将仅检查流是否当前附加到文件, .is_open
不在乎流是否处于失败状态,或不。
.fail
will check the overall "health" of the stream, which involves things such as checking the stream has currently entered a fail state from trying to read an invalid value, whereas .is_open
will only check if the stream is currently attached to a file, .is_open
doesn't care if the stream is in a fail state, or not.
通常建议您依赖于 显式运算符bool()
以查看流是否可以读取/写入。这包括检查流的整体健康。
Normally it's recommended to rely on the explicit operator bool ()
to see if a stream is ready to be read/written to. This includes checking the overall health of the stream.
我们可以在 some_stream
/ p>
Can we make another read/write operation on some_stream
?
if (some_stream) {
// stream is alive and well
} else {
// something is wrong
}
如果你明确想看看是否有一些 fstream 实际上附加到一个文件,使用 is_open
,如果你想检查整体健康;使用 .fail
或依赖于流可转换为 bool
的事实。
If you explicitly would like to see if some fstream is actually attached to a file, use is_open
, and if you want to check the overall health; use .fail
or rely on the fact that a stream is convertiable to bool
.
这篇关于ifstream :: is_open vs ifstream :: fail?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!