Je suis nouveau dans C++ et je veux ajouter la vérification des erreurs à mon code et je veux m'assurer que j'utilise de bonnes pratiques de codage. J'ai lu une ligne d'un fichier ASCII dans une chaîne en utilisant:
ifstream paramFile;
string tmp;
//open input file
tmp.clear();
paramFile >> tmp;
//parse tmp
Comment puis-je vérifier les erreurs pour m'assurer que la lecture du fichier d'entrée a réussi?
Je vois des façons beaucoup plus compliquées de lire à partir d'un fichier ASCII là-bas. La façon dont je le fais est-elle "sûre/robuste"?
paramFile >> tmp;
Si la ligne contient des espaces, cela ne lira pas la ligne entière. Si vous le souhaitez, utilisez std::getline(paramFile, tmp);
qui lit jusqu'à la nouvelle ligne. La vérification des erreurs de base se fait en examinant les valeurs de retour. Par exemple:
if(paramFile>>tmp) // or if(std::getline(paramFile, tmp))
{
std::cout << "Successful!";
}
else
{
std::cout << "fail";
}
operator>>
Et std::getline
Renvoient tous les deux une référence au flux. Le flux est évalué en une valeur booléenne que vous pouvez vérifier après l'opération de lecture. L'exemple ci-dessus n'est évalué comme vrai que si la lecture a réussi.
Voici un exemple de la façon dont je pourrais créer votre code:
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
}