Travailler avec le système de fichiers en C++ : guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travailler avec le système de fichiers en C++ : des bases aux techniques avancées



Travailler avec le système de fichiers est l'une des tâches fondamentales du développement en C++. Qu'il s'agisse de sauvegarder les paramètres d'une application, de traiter des logs ou de créer des systèmes complexes de gestion de données — savoir lire, écrire et manipuler des fichiers et des répertoires est essentiel pour tout développeur C++. Dans cet article, nous examinerons à la fois les méthodes classiques de travail avec les fichiers via fstream et l'approche moderne utilisant la bibliothèque std::filesystem (C++17 et plus récent).



Fondamentaux du travail avec les fichiers : la bibliothèque fstream



La bibliothèque fstream (<fstream>) fournit trois classes principales pour travailler avec les fichiers :



  • ifstream — pour la lecture depuis un fichier (input file stream);
  • ofstream — pour l'écriture dans un fichier (output file stream);
  • fstream — pour la lecture et l'écriture simultanées.


Lecture de données depuis un fichier



Examinons l'exemple le plus simple d'ouverture et de lecture d'un fichier texte ligne par ligne :



#include <iostream>#include <fstream>#include <string>

int main() { std::ifstream inputFile("data.txt"); if (!inputFile.is_open()) { std::cerr << "Erreur d'ouverture du fichier !" << std::endl; return 1; }

std::string line; while (std::getline(inputFile, line)) { std::cout << line << std::endl; }

inputFile.close(); return 0;}


Il est important de toujours vérifier le succès de l'ouverture du fichier à l'aide de la méthode is_open(). Le fichier se fermera automatiquement à la sortie de la portée, mais un appel explicite à close() est considéré comme une bonne pratique.



Écriture de données dans un fichier



L'écriture dans un fichier s'effectue de manière analogue à l'affichage dans la console — à l'aide de l'opérateur << :



#include <fstream>

int main() { std::ofstream outputFile("output.txt"); if (!outputFile) { std::cerr << "Impossible de créer le fichier !" << std::endl; return 1; }

outputFile << "Ligne 1" << std::endl; outputFile << "Ligne 2" << std::endl; outputFile << 42 << std::endl; // les nombres sont écrits automatiquement comme du texte

outputFile.close(); return 0;}


Par défaut, ofstream écrase le fichier. Pour ajouter des données à la fin, utilisez le drapeau std::ios::app :



std::ofstream outputFile("log.txt", std::ios::app);


Fichiers binaires et accès aléatoire



Pour travailler avec des données binaires, utilisez le drapeau std::ios::binary. Les méthodes read() et write() permettent de travailler avec des blocs de mémoire :



#include <fstream>

struct Record { int id; char name[50];};

int main() { // Écriture de la structure Record rec = {1, "Exemple"}; std::ofstream binOut("data.bin", std::ios::binary); binOut.write(reinterpret_cast<char*>(&rec), sizeof(rec)); binOut.close();

// Lecture de la structure Record recIn; std::ifstream binIn("data.bin", std::ios::binary); binIn.read(reinterpret_cast<char*>(&recIn), sizeof(recIn)); binIn.close();

return 0;}


Pour le positionnement à l'intérieur du fichier, utilisez seekg() (pour l'entrée) et seekp() (pour la sortie) avec les paramètres std::ios::beg, std::ios::cur ou std::ios::end.



C++ moderne : la bibliothèque std::filesystem



À partir de C++17, le module std::filesystem a été intégré à la bibliothèque standard, ce qui simplifie considérablement le travail avec le système de fichiers. Il fournit des fonctions pratiques pour la manipulation des chemins, des fichiers et des répertoi

Blogs

Book Recommendations