Maison >développement back-end >C++ >Comment puis-je récupérer le message d'erreur lorsqu'un « ifstream » ne parvient pas à ouvrir un fichier ?

Comment puis-je récupérer le message d'erreur lorsqu'un « ifstream » ne parvient pas à ouvrir un fichier ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-25 09:02:10906parcourir

How Can I Retrieve the Error Message When an `ifstream` Fails to Open a File?

Gérer les échecs d'ouverture d'ifstream : récupérer le message d'erreur

Accéder aux messages d'erreur en C lors de l'ouverture d'un fichier à l'aide d'ifstream peut être difficile. Pour résoudre ce problème, examinons les techniques permettant d'extraire la raison de l'erreur.

La méthode standard pour vérifier les erreurs d'ouverture de fichier est :

ifstream f;
f.open(fileName);

if ( f.fail() )
{
    // I need error message here, like "File not found" etc. -
    // the reason of the failure
}

Utiliser errno pour les messages d'erreur

En C , lorsqu'un appel système échoue, il met à jour la variable globale errno. Par conséquent, vous pouvez obtenir des détails supplémentaires sur les échecs d'ouverture d'ifstream en utilisant errno :

ifstream f;
f.open(fileName);

if ( f.fail() )
{
    cerr << "Error: " << strerror(errno);
}

Considérations sur la sécurité des threads

Notez que errno est une variable globale. Dans les applications multithread, vous devez être prudent. Si un autre appel système déclenche une erreur entre l'exécution de f.open() et l'utilisation de errno, cela pourrait affecter l'exactitude du message d'erreur.

Systèmes standards POSIX

Sur POSIX- systèmes compatibles, errno est thread-local. Cela implique que la définition de errno dans un thread n'a pas d'impact sur sa valeur dans aucun autre thread.

Fonction e.what() dépendante de l'implémentation

À l'origine, e.what() semblait être une fonction plus Approche C appropriée pour récupérer les informations sur les erreurs. Cependant, cette fonction renvoie une chaîne spécifique à l'implémentation. Dans la libstdc de G, cette chaîne fournit souvent peu d'informations significatives sur l'échec.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn