Ecrire dans un fichier en C++

Jinku Hu 12 octobre 2023
  1. Utilisez les opérateurs fstream et << pour écrire dans un fichier
  2. Utiliser les fonctions fstream et write pour écrire dans un fichier
  3. Utiliser la fonction fwrite pour écrire dans un fichier
Ecrire dans un fichier en C++

Cet article explique plusieurs méthodes pour écrire dans un fichier en C++.

Utilisez les opérateurs fstream et << pour écrire dans un fichier

Le fichier I/O en C++ est géré par la classe fstream, qui fournit de multiples méthodes intégrées pour la manipulation et le positionnement des flux. Une fois que l’objet fstream est déclaré, nous pouvons appeler la fonction open, en passant le nom du fichier et le mode d’ouverture du fichier en argument.

Lors de l’écriture dans un fichier, nous spécifions le mode std::ios_base::out, qui correspond à l’état open for writing. Ensuite, nous vérifions si le fichier a été associé avec succès à l’objet stream, c’est-à-dire l’appel à la méthode is_open dans la condition if. A ce stade, le fichier est prêt à prendre en entrée en utilisant l’opérateur << et à traiter la sortie selon les besoins.

Notez que le bloc else peut être utilisé pour l’enregistrement des erreurs, ou nous pouvons implémenter des routines de traitement des erreurs pour une meilleure exécution du programme tolérant aux erreurs.

#include <fstream>
#include <iostream>

using std::cout;
using std::endl;
using std::fstream;
using std::ofstream;
using std::string;

int main() {
  string filename("tmp.txt");
  fstream file_out;

  file_out.open(filename, std::ios_base::out);
  if (!file_out.is_open()) {
    cout << "failed to open " << filename << '\n';
  } else {
    file_out << "Some random text to write." << endl;
    cout << "Done Writing!" << endl;
  }

  return EXIT_SUCCESS;
}

Production :

Done Writing!

Utiliser les fonctions fstream et write pour écrire dans un fichier

Une autre méthode pour écrire dans un fichier est la fonction intégrée write qui peut être appelée depuis l’objet fstream. La fonction write prend un pointeur de chaîne de caractères et la taille des données stockées à cette adresse. En conséquence, des données données données sont insérées dans le fichier associé à l’objet stream appelant.

Dans l’exemple de code suivant, nous démontrons le signalement d’erreur minimal en imprimant l’état de l’appel de la fonction open, mais dans les applications du monde réel, cela nécessiterait une gestion des exceptions plus robuste, qui est documentée dans la page de manuel.

#include <fstream>
#include <iostream>

using std::cout;
using std::endl;
using std::fstream;
using std::ofstream;
using std::string;

int main() {
  string text("Some huge text to write to\n");
  string filename2("tmp2.txt");
  fstream outfile;

  outfile.open(filename2, std::ios_base::out);
  if (!outfile.is_open()) {
    cout << "failed to open " << filename2 << '\n';
  } else {
    outfile.write(text.data(), text.size());
    cout << "Done Writing!" << endl;
  }

  return EXIT_SUCCESS;
}

Production :

Done Writing!

Utiliser la fonction fwrite pour écrire dans un fichier

Alternativement, nous pouvons utiliser la fonction fwrite du fichier de style C I/O pour écrire dans le fichier. La fonction fwrite obtient les données à partir du pointeur void et le programmeur est responsable de transmettre le nombre d’éléments stockés à cette adresse ainsi que la taille de chaque élément. La fonction a besoin que le flux de fichiers soit de type FILE* et cela peut être obtenu en appelant la fonction fopen.

Notez que la fonction fwrite retourne le nombre d’éléments écrits dans un fichier lorsque l’opération est réussie.

#include <fstream>
#include <iostream>

using std::cout;
using std::endl;
using std::ofstream;
using std::string;

int main() {
  string text("Some huge text to write to\n");
  string filename3("tmp3.txt");

  FILE *o_file = fopen(filename3.c_str(), "w+");
  if (o_file) {
    fwrite(text.c_str(), 1, text.size(), o_file);
    cout << "Done Writing!" << endl;
  }

  return EXIT_SUCCESS;
}

Production :

Done Writing!
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Article connexe - C++ File