Ответ 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
}