问题描述
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()
,该文章早于该文章。请注意,在打开/创建文件之前检查文件是否存在会引入竞争条件。在您检查文件是否存在之后以及您自己打开/创建文件之前,另一个进程可能会创建/删除该文件。