Подтвердить что ты не робот

С++ ifstream Проверка ошибок

Я новичок в С++ и хочу добавить проверку ошибок в свой код, и я хочу убедиться, что я использую хорошие методы кодирования. Я прочитал строку из файла ASCII в строку, используя:

ifstream paramFile;
string tmp;

//open input file

tmp.clear();

paramFile >> tmp;

//parse tmp
  • Как я могу проверить ошибку, чтобы убедиться, что входной файл прочитан успешно?

  • Я вижу гораздо более сложные способы чтения из ASCII файла. Является ли это способом "безопасным/надежным"?

4b9b3361

Ответ 1

paramFile >> tmp; Если строка содержит пробелы, это не будет читать всю строку. Если вы хотите использовать std::getline(paramFile, tmp);, который читается до новой строки. Основная проверка ошибок выполняется путем проверки возвращаемых значений. Например:

if(paramFile>>tmp) // or if(std::getline(paramFile, tmp))
{
    std::cout << "Successful!";
}
else
{
    std::cout << "fail";
}

operator>> и std::getline возвращают ссылку на поток. Поток оценивает логическое значение, которое вы можете проверить после операции чтения. Вышеприведенный пример будет оценивать только true, если чтение было успешным.

Вот пример того, как я могу сделать ваш код:

ifstream paramFile("somefile.txt"); // Use the constructor rather than `open`
if (paramFile) // Verify that the file was open successfully
{
    string tmp; // Construct a string to hold the line
    while(std::getline(paramFile, tmp)) // Read file line by line
    {
         // Read was successful so do something with the line
    }
}
else
{
     cerr << "File could not be opened!\n"; // Report error
     cerr << "Error code: " << strerror(errno); // Get some info as to why
}