web-dev-qa-db-fra.com

C ++ ifstream failbit et badbit

Dans le cas de ifstream en C++, dans quelles conditions les drapeaux failbit et badbit sont-ils définis?

51
Jake

Selon cplusplus.com :

failbit est généralement défini par une opération d'entrée lorsque l'erreur était liée à la logique interne de l'opération elle-même, de sorte que d'autres opérations sur le flux peuvent être possibles. Alors que badbit est généralement défini lorsque l'erreur implique la perte d'intégrité du flux, qui est susceptible de persister même si une opération différente est effectuée sur le flux . badbit peut être vérifié indépendamment en appelant la fonction membre bad.

En mots simples, si vous obtenez un nombre quand attendez-vous à récupérer un lettre , c'est failbit. Si une erreur grave se produit, ce qui perturbe la capacité de lecture du flux - c'est un badbit.

Sauf les drapeaux mentionnés, il y en a un troisième assez similaire - eofbit. Vous pouvez vérifier l'état à l'aide de plusieurs fonctions: ios::fail , ios::good et ios::bad

Et vous pouvez vous familiariser avec la bibliothèque iostream sur la ressource MSDN également.

Enfin , si vous recherchez la solution correcte de gestion de tous bits d'erreur et exceptions lors de la lecture du fichier (ou accès à un fichier ou un répertoire), je vous recommande fortement de lire un article très complet et bien écrit " Lecture de fichiers en C++ en utilisant ifstream: traiter correctement badbit, failbit, eofbit et perror () ", à la fin desquels vous en trouverez quelques-uns Solutions idéales. L'article mérite effectivement d'être lu.

61
gahcep