Maison > Article > développement back-end > Pourquoi mon `std::fstream` ne parvient-il pas à créer un fichier ?
Lorsque vous tentez de manipuler des fichiers à l'aide de la bibliothèque C IO, std::fstream offre un accès pratique aux fichiers et des capacités d'entrée/sortie . Cependant, rencontrer des problèmes lors de la création d'un fichier peut entraver la progression.
Un piège courant réside dans l'utilisation d'indicateurs incorrects lors de l'ouverture d'un fichier. Considérons l'extrait suivant :
<code class="cpp">std::fstream my_stream; my_stream.open("my_file_name", std::fstream::binary | std::fstream::in | std::fstream::out); if (!my_stream) std::cout << "error" << strerror(errorno);</code>
Dans ce code, on tente de créer un fichier nommé "my_file_name" pour l'écriture. Cependant, l'inclusion de std::fstream::in dans l'argument mode a des conséquences inattendues :
<code class="cpp">// In effect, the above code is equivalent to: my_stream.open("my_file_name", std::fstream::binary | std::fstream::in);</code>
L'indicateur std::fstream::in spécifie explicitement la nécessité d'un fichier existant, ce qui contredit le intention de créer un fichier qui n'existe potentiellement pas.
Pour remédier à ce problème, plusieurs solutions sont disponibles :
Supprimez simplement l'indicateur std::fstream::in de l'argument mode. Cela permettra au flux de créer le fichier s'il n'existe pas :
<code class="cpp">my_stream.open("my_file_name", std::fstream::binary | std::fstream::out);</code>
If le fichier existe déjà, vous souhaiterez peut-être le tronquer au lieu de l'ajouter. Pour y parvenir, ajoutez std::fstream::trunc à l'argument mode :
<code class="cpp">my_stream.open("my_file_name", std::fstream::binary | std::fstream::out | std::fstream::trunc);</code>
Comprendre l'utilisation appropriée des indicateurs et leurs implications est crucial pour gérer efficacement les fichiers avec std::fstream.
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!