36 votes

Obtenir std::fstream échec des messages d'erreur et/ou exceptions

Je suis l'aide de fstream. Est-il possible d'obtenir le message d'erreur/exception?

Par exemple, si je suis incapable d'ouvrir le fichier?

10voto

Doug Points 4923

Réponse courte: non. Même en vérifiant errno suivant la détection de défaillance (en utilisant par ex. bad(), fail()) après diverses opérations n'est pas fiable. La création d'un ifstream/ofstream enveloppant d'un fichier qui ne peut pas être ouvert ne signifie pas nécessairement définir un échec à peu jusqu'à ce que vous essayez de lire, d'écrire, ou de le fermer.

Réponse longue: vous pouvez appeler ios::exceptions(ios_base::iostate) de la demande qu' ios_base::ios_failure des exceptions être levée lorsqu'un bit correspondant (badbit, failbit n', eofbit) est défini, mais (au moins sur GNU et Microsoft bibliothèques C++) n'est pas vous obtenir plus d'informations qu'à vérifier manuellement les bits, et finit par être largement inutile, à mon humble avis.

3voto

sofr Points 974

De le vérifier, j'ai trouvé que aussi errno et également GetLastError() définissez la dernière erreur et de la vérification est très utile. Pour obtenir le message de la chaîne de l'utilisation:

strerror(errno);

2voto

gjpc Points 838

Code pour @geotavros

while ( !inf.eof() )
{
    inf.read( inbuf, sizeof(inbuf) );
    if ( !inf.eof() && ( inf.fail() || inf.bad() ) )
    {
        cout << "error reading file " << file.str() 
             << " error: " << strerror( errno ) << endl;
        break;
    }
    streamsize bytesRead = inf.gcount();

    // do nifty things here
}

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