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
Libérer: 2024-12-25 09:02:10
original
902 Les gens l'ont consulté

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
}
Copier après la connexion

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);
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal