Travail avec le système de fichiers en C++ : pour débutants
Le travail avec le système de fichiers est l'une des tâches clés de tout programmeur. En C++, il existe plusieurs façons d'interagir avec les fichiers et les répertoires : des flux classiques fstream au moderne std::filesystem (C++17). Dans cet article, nous aborderons les opérations de base : lecture et écriture de fichiers, vérification de leur existence, création et suppression de dossiers, ainsi que la navigation dans le système de fichiers. Tous les exemples de code sont écrits en C++ et conviennent aux débutants.
1. Bases du travail avec les fichiers via fstream
Les classes ifstream (entrée depuis un fichier), ofstream (sortie vers un fichier) et fstream (entrée/sortie) sont les outils de base pour travailler avec des fichiers texte et binaires. Elles se trouvent dans le fichier d'en-tête <fstream>.
Lecture d'un fichier
Pour lire des données depuis un fichier, créez un objet ifstream et ouvrez le fichier. Assurez-vous que le fichier existe, sinon le flux sera dans un état d'erreur.
#include <iostream>#include <fstream>#include <string>
int main() { std::ifstream file("example.txt"); if (!file.is_open()) { std::cerr << "Erreur d'ouverture du fichier"; return 1; }
std::string line; while (std::getline(file, line)) { std::cout << line << std::endl; }
file.close(); return 0;}Écriture dans un fichier
Pour écrire, utilisez ofstream. Si le fichier n'existe pas, il sera créé. S'il existe, le contenu sera écrasé (sauf si le drapeau std::ios::app est spécifié).
#include <fstream>
int main() { std::ofstream file("output.txt"); if (!file.is_open()) { std::cerr << "Impossible de créer le fichier"; return 1; }
file << "Hello, world!"; file << "Système de fichiers C++";
file.close(); return 0;}Ajout de données à la fin d'un fichier
Utilisez le drapeau std::ios::app (append) pour ajouter des données à la fin sans supprimer les précédentes.
std::ofstream file("log.txt", std::ios::app);file << "Nouvelle entrée";file.close();2. Travail avec les répertoires et le système de fichiers (C++17)
À partir de C++17, la bibliothèque standard inclut l'en-tête <filesystem>, qui fournit une interface pratique et multiplateforme pour travailler avec le système de fichiers. Pour l'utiliser, ajoutez le drapeau de compilation -std=c++17 (ou supérieur) et incluez <filesystem>.
Vérification de l'existence d'un fichier ou d'un répertoire
#include <iostream>#include <filesystem>namespace fs = std::filesystem;
int main() { fs::path p = "example.txt"; if (fs::exists(p)) { std::cout << "Le fichier existe"; std::cout << "Taille : " << fs::file_size(p) << " octets"; } else { std::cout << "Fichier non trouvé"; } return 0;}Création et suppression de répertoires
#include <filesystem>namespace fs = std::filesystem;
int main() { // Création d'un seul répertoire if (fs::create_directory("my_folder")) { std::cout << "Dossier créé"; }
// Création de répertoires imbriqués fs::create_directories("a/b/c");
// Suppression d'un répertoire vide fs::remove("my_folder");
// Suppression d'un répertoire avec tout son contenu (attention !) // fs::remove_all("a");
return 0;}Parcours du contenu d'un répertoire
#include <iostream>#include <filesystem>namespace fs = std::filesystem;
int main() { std::string path = "."; for (const auto& entry : fs::directory_iterator(path)) { if