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

时间:2019-07-04 13:57:02

标签: c++ ifstream

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

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

我从教科书中学到的东西(例如“ c ++ primer plus”)类似于判断通过ifstream是否存在文件时的情况,

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

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

1 个答案:

答案 0 :(得分:3)

这取决于streams convert to bool的方式(或者在这种情况下,这是由于operator!造成的,但原理相同)。

经过精心设计,您可以简短地检查开放性(and error flags),如下所示:

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

(打开失败设置失败位)。

您的版本只是跳过声明,并使用临时版本执行相同的操作。

请注意,还有其他原因导致文件无法打开,例如权限。这不是检查它是否存在的可靠方法,即使存在,您也无法保证在尝试对其进行处理时仍会存在。