Travail avec le système de fichiers en C++ : exemples pratiques

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

Introduction

Le travail avec le système de fichiers est l'une des tâches clés dans toute programmation applicative. En C++, il existe deux approches principales : l'approche classique (avec la bibliothèque <fstream>) et l'approche moderne (avec la bibliothèque <filesystem>, disponible à partir de la norme C++17). Dans cet article, nous allons voir, à travers des exemples pratiques, comment lire et écrire des fichiers, créer et supprimer des répertoires, et vérifier l'existence de fichiers.

Ce contenu sera utile aussi bien aux débutants qui apprennent le C++ qu'aux développeurs expérimentés souhaitant rafraîchir leurs connaissances sur les fonctionnalités modernes du langage.



1. Lecture et écriture de fichiers texte avec fstream

La bibliothèque <fstream> fournit des classes pour travailler avec les fichiers : ifstream (lecture), ofstream (écriture) et fstream (lecture et écriture).



1.1. Écrire des données dans un fichier

Pour écrire dans un fichier, nous utilisons un objet ofstream. Si le fichier n'existe pas, il sera créé. S'il existe, son contenu sera écrasé (par défaut).

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

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

outFile << "Bonjour le monde !" << std::endl; outFile << "Ceci est la deuxième ligne." << std::endl; outFile.close(); std::cout << "Données écrites." << std::endl; return 0;}

Notez que nous vérifions toujours si le fichier a bien été ouvert et nous le fermons après utilisation.



1.2. Lire des données depuis un fichier

Pour la lecture, nous utilisons ifstream. La méthode la plus simple est de lire ligne par ligne avec std::getline.

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

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

std::string line; while (std::getline(inFile, line)) { std::cout << line << std::endl; } inFile.close(); return 0;}

Cette méthode est pratique car elle gère automatiquement la fin du fichier et ne nécessite pas de vérifications supplémentaires.



1.3. Modes d'ouverture de fichier

Vous pouvez combiner des indicateurs pour contrôler le mode d'ouverture. Par exemple, pour ajouter des données à la fin du fichier (mode append), utilisez l'indicateur std::ios::app :

std::ofstream outFile("example.txt", std::ios::app);outFile << "Ligne supplémentaire." << std::endl;outFile.close();

Autres indicateurs utiles : std::ios::binary (mode binaire), std::ios::trunc (effacement du fichier à l'ouverture).



2. Travail moderne avec le système de fichiers (C++17 et filesystem)

La bibliothèque <filesystem> simplifie considérablement les manipulations de fichiers et de dossiers. Toutes les fonctions se trouvent dans l'espace de noms std::filesystem.



2.1. Vérification de l'existence d'un fichier ou d'un répertoire

La fonction exists() retourne true si l'objet existe :

#include <iostream>#include <filesystem>

namespace fs = std::filesystem;

int main() { std::string path = "example.txt"; if (fs::exists(path)) { std::cout << "Le fichier existe." << std::endl; } else { std::cout << "Fichier non trouvé." << std::endl; } return 0;}


2.2. Création et suppression de répertoires

Pour créer un dossier, utilisez create_directory(). Pour supprimer, utilisez remove() ou remove_all() (suppression récursive).

Blogs

Book Recommendations