C++使用ifstream判断文件是否存在的问题

Question about deciding whether a file exists in C++ using ifstream

我找到了一个使用ifstream 来判断文件是否存在的c++ 代码。该部分是,

if (!ifstream(trajectory_file_name_)) {
    cerr << "ERROR: The trajectory file:";
    cerr << "3[1;34m";
    cerr << trajectory_file_name_;
    cerr << "3[0m";
    cerr << " does not exist.";
    cerr << endl;
    exit(1);
}

我从课本上学到的(比如"c++ primer plus")是这样的,通过ifstream判断一个文件是否存在,

ifstream inFile(filename-);
if(!inFile.is_open())
{
  return;
}

我搜索了很多网站,但没有找到关于第一个网站的任何信息。所以我想知道是否有人可以给我解释一下第一个的 ifstream 的用法。谢谢!

这归结为 streams convert to bool(或者在本例中是由于 operator!,但原理相同)。

简而言之,它的设计让您可以检查开放性 (and error flags),例如:

std::ifstream ifs("path");
if (!ifs)
{
   // ...
}

(打开失败设置 failbit)。

您的版本只是跳过了声明并使用临时文件做同样的事情。

请注意,还有其他原因可能导致文件无法打开,例如权限。这不是检查它是否存在的可靠方法,即使存在,您也无法保证当您尝试使用它做某事时它仍然存在。