Boost.Filesystem C++ : guide complet avec 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

Boost.Filesystem pour C++ : Guide complet de gestion du système de fichiers

Boost.Filesystem est une bibliothèque C++ puissante et mature qui offre une interface portable (multiplateforme) pour effectuer des opérations sur le système de fichiers. Faisant partie de la collection de bibliothèques Boost, elle a en fait servi de prototype à la bibliothèque standard <filesystem> du C++17. Si vous travaillez avec C++11 ou C++14 et avez besoin d'un outil fiable et éprouvé pour manipuler les chemins, fichiers et répertoires, Boost.Filesystem est le choix idéal.

Pourquoi est-elle nécessaire ? Le C++ standard a longtemps manqué de moyens intégrés pour des tâches simples comme vérifier l'existence d'un fichier, créer un répertoire ou parcourir récursivement des dossiers. Les développeurs devaient utiliser stat() sous Linux ou GetFileAttributes() sous Windows, rendant le code non portable. Boost.Filesystem résout ce problème en fournissant une API unifiée qui fonctionne de la même manière sur toutes les plateformes principales. La bibliothèque encapsule les appels système, gère les encodages de chemins (par exemple, UTF-8 sous Linux et UTF-16 sous Windows) et propose des classes pratiques pour manipuler les chemins et itérer sur les répertoires.

Dans cet article, nous allons détailler l'installation de la bibliothèque, les classes et méthodes essentielles, et présenter un exemple pratique concret que vous pourrez utiliser dans vos projets. Nous nous concentrerons sur la version Boost 1.84 (actuelle au moment de la rédaction), mais les exemples fonctionneront également avec des versions plus anciennes.

Installation de Boost.Filesystem

Contrairement aux langages dotés de gestionnaires de paquets (npm, pip), le C++ nécessite la compilation des bibliothèques. Boost.Filesystem n'est pas une bibliothèque "header-only" pour toutes ses parties ; pour travailler avec les fichiers, une bibliothèque compilée (libboost_filesystem) est requise.

Installation via un gestionnaire de paquets (recommandé)

Ubuntu/Debian (Linux) :

sudo apt update
sudo apt install libboost-filesystem-dev

macOS (Homebrew) :

brew install boost

Windows (vcpkg) :

vcpkg install boost-filesystem

Compilation depuis les sources (si pas de gestionnaire de paquets)

# Téléchargez Boost depuis le site officiel
wget https://boostorg.jfrog.io/artifactory/main/release/1.84.0/source/boost_1_84_0.tar.gz
tar -xzf boost_1_84_0.tar.gz
cd boost_1_84_0

# Lancez bootstrap
./bootstrap.sh

# Compilez uniquement la bibliothèque filesystem (gagne du temps)
./b2 --with-filesystem

# Installez (généralement dans /usr/local)
sudo ./b2 install

Compilation d'un projet avec Boost.Filesystem

Lors de la compilation, vous devez spécifier le chemin vers les fichiers d'en-tête et lier la bibliothèque :

g++ -std=c++11 -I/chemin/vers/boost main.cpp -lboost_filesystem -lboost_system -o mon_programme

Démarrage rapide : exemple minimal fonctionnel

Écrivons un programme simple qui vérifie si un fichier existe et affiche sa taille.

#include <iostream>
#include <boost/filesystem.hpp>

namespace fs = boost::filesystem;

int main() {
    // Chemin vers le fichier
    fs::path chemin_fichier("exemple.txt");

    // Vérifie si le fichier existe
    if (fs::exists(chemin_fichier)) {
        // Obtient la taille du fichier
        uintmax_t taille_fichier = fs::file_size(chemin_fichier);
        std::cout << "Fichier : " << chemin_fichier.filename() << std::endl;
        std::cout << "Taille : " << taille_fichier << " octets" << std::endl;
    } else {
        std::cout << "Fichier introuvable." << std::endl;
    }

    return 0;
}

Ce code illustre trois fonctionnalités clés : la création d'un objet chemin (fs::path), la vérification de l'existence d'un fichier (fs::exists) et l'obtention de sa taille.

Recommendations