45 votes

ifstream : vérifiez si l'ouverture a réussi

Un collègue vient de me dire que ce code :

 std::ifstream stream(filename.c_str());
if (!stream)
{
    throw std::runtime_error("..");
}

aurait tort. Il a dit que ifstream évalué à 0 si l'ouverture est réussie. Mon code fonctionne, mais je voulais trouver la documentation mais je n'ai pas vu où il est dit comment vérifier si l'ouverture a réussi. Pouvez-vous me l'indiquer?

53voto

Oli Charlesworth Points 148744

operator! est surchargé pour std::ifstream , vous pouvez donc le faire.

À mon avis, cependant, il s'agit d'un horrible abus de surcharge d'opérateur (par le comité des normes). C'est beaucoup plus explicite ce que vous vérifiez si vous faites simplement if (stream.fail()) .

3voto

Votre collègue a tort . Peut-être qu'il a oublié que vous n'écrivez pas C.

Le code est sur place. C'est exactement comme cela que vous devriez vérifier l'état du flux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X