Quand est-ce que ofstream :: open échouera?
J'essaie try, catch, de jeter des déclarations en C++ pour la gestion des fichiers, et j'ai écrit un code factice de rattraper toutes les erreurs. Ma question est pour vérifier si j'ai eu ces droit, j'ai besoin d'une erreur. Maintenant, je peux facilement vérifier infile.fail()
simplement pas la création d'un fichier de nom dans le répertoire. Mais comment vais-je être en mesure de vérifier la même chose pour outfile.fail()
(outfile
est ofstream
où, comme infile
est ifstream
). Dans ce cas, la valeur pour outfile.fail()
être vrai?
exemple de code [de commentaires sur unapersson réponse, simplifiée pour rendre la question plus claire -zack]:
#include <fstream>
using std::ofstream;
int main()
{
ofstream outfile;
outfile.open("test.txt");
if (outfile.fail())
//do something......
else
//do something else.....
return 0;
}
source d'informationauteur Scranton
Vous devez vous connecter pour publier un commentaire.
La
open(2)
page de man Linux a environ 30 conditions. Certains intéressant sont:char*
pour le nom de fichier.Par défaut, et de par sa conception, C++ flux ne jamais lancer des exceptions en cas d'erreur. Vous ne devriez pas essayer d'écrire un code qui suppose qu'ils font, même si il est possible de les obtenir. Au lieu de cela, dans la logique de l'application de vérifier chaque opération d'e/S pour une erreur et faire avec, éventuellement, lancer votre propre exception si cette erreur ne peut pas être traitée à l'endroit précis, il se produit dans votre code.
La manière canonique de test des ruisseaux et des flux des opérations n'est pas de tester volet spécifique sur les drapeaux, sauf si vous avez. Au lieu de cela:
de même pour les opérations de lecture:
Pour obtenir
ofstream::open
à l'échec, vous devez vous arranger pour qu'il soit impossible de créer le nom de fichier. La meilleure façon de le faire est de créer un répertoire du même nom avant d'exécuter le programme. Voici un quasi-complète de démonstration du programme; organiser de manière fiable supprimer le répertoire de test si et seulement si vous l'avez créé, je laisse comme exercice.Il n'y a pas de bonne façon de s'assurer que écrit à un fstream échoue. Je serais probablement créer une maquette ostream qui ont échoué à l'écrit, si j'avais besoin de le tester.