Вопрос о том, чтобы решить, существует ли файл в C ++, используя ifstream - PullRequest
1 голос
/ 04 июля 2019

Я нашел код 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 Ответ

3 голосов
/ 04 июля 2019

Это сводится к тому, как потоки преобразуются в bool (или в данном случае это из-за operator!, но по тому же принципу).

Он разработан так, что для краткости, вы можете проверить на открытость ( и флаги ошибок ), например:

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

(невозможность открытия устанавливает failbit ).

ВашВерсия просто пропускает объявление и делает то же самое с временным.

Обратите внимание, что существуют другие причины, по которым файл не может быть открыт, например, права доступа.Это не надежный способ проверить, существует ли он, и даже если он существует, у вас нет возможности гарантировать, что он все еще будет существовать в тот момент, когда вы попытаетесь что-то с ним сделать.

...