if(file) 和 if(file.good()) 的区别?

问题描述

所以我在这里查看了有关如何检查文件是否存在的信息:

The best way to check if a file exists using standard C/C++

他们先说 if(ifile),然后再检查然后添加 else 语句。我通常会用 if(myfile.good()) 来检查相同的事情。

它的运作方式有什么不同吗?

解决方法

为了检查文件流是否成功打开,good()bool operator 是相同的。

good()bool 运算符之间只有 1 个细微的区别,那就是 good() 仅在 none 流的状态标志为设置,而 bool 运算符在 good() 为真或仅设置了 eofbit 标志时返回真。因此,在您开始从流中读取数据之前,这种差异不会发挥作用。

请注意,流也有一个 is_open() 方法。

话虽如此 - 该文章的代码仅检查文件是否可以打开,而不检查文件是否存在。文件可以存在,但您可能无权打开它。检查存在的更好方法是使用std::filesystem::exists(),该文章早于该文章。请注意,在打开/创建文件之前检查文件是否存在会引入竞争条件。在您检查文件是否存在之后以及您自己打开/创建文件之前,另一个进程可能会创建/删除该文件。