Boost.Filesystem para C++: Guía completa para trabajar con el sistema de archivos
Boost.Filesystem es una biblioteca potente y madura de C++ que proporciona una interfaz portable (multiplataforma) para realizar operaciones con el sistema de archivos. Forma parte de la colección de bibliotecas Boost y, de hecho, sirvió como prototipo para la biblioteca estándar <filesystem> en C++17. Si trabajas con C++11 o C++14 y necesitas una herramienta fiable y probada para manejar rutas, archivos y directorios, Boost.Filesystem es tu mejor opción.
¿Por qué es necesaria? Durante mucho tiempo, C++ estándar careció de herramientas integradas para tareas tan simples como verificar si un archivo existe, crear un directorio o recorrer carpetas de forma recursiva. Los desarrolladores tenían que recurrir a stat() en Linux o GetFileAttributes() en Windows, lo que hacía que el código no fuera portable. Boost.Filesystem resuelve este problema ofreciendo una API unificada que funciona igual en todas las plataformas principales. La biblioteca encapsula las llamadas al sistema, gestiona las codificaciones de rutas (por ejemplo, UTF-8 en Linux y UTF-16 en Windows) y proporciona clases cómodas para trabajar con rutas e iterar sobre directorios.
En este artículo, analizaremos en detalle la instalación de la biblioteca, las clases y métodos principales, y presentaremos un ejemplo práctico real que podrás usar en tus proyectos. Nos centraremos en la versión Boost 1.84 (la actual en el momento de escribir esto), pero los ejemplos también funcionarán con versiones anteriores.
Instalación de Boost.Filesystem
A diferencia de los lenguajes con gestores de paquetes (npm, pip), C++ requiere compilar las bibliotecas. Boost.Filesystem es una biblioteca "header-only" solo para algunas partes; para trabajar con archivos necesitas la biblioteca compilada (libboost_filesystem).
Instalación mediante gestor de paquetes (recomendado)
Ubuntu/Debian (Linux):
sudo apt update
sudo apt install libboost-filesystem-dev
macOS (Homebrew):
brew install boost
Windows (vcpkg):
vcpkg install boost-filesystem
Compilación desde el código fuente (si no tienes gestor de paquetes)
# Descarga Boost desde el sitio oficial
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
# Ejecuta bootstrap
./bootstrap.sh
# Compila solo la biblioteca filesystem (ahorra tiempo)
./b2 --with-filesystem
# Instala (normalmente en /usr/local)
sudo ./b2 install
Compilación de un proyecto con Boost.Filesystem
Al compilar, debes indicar la ruta a los archivos de cabecera y enlazar con la biblioteca:
g++ -std=c++11 -I/ruta/a/boost main.cpp -lboost_filesystem -lboost_system -o mi_programa
Inicio rápido: ejemplo mínimo funcional
Escribamos un programa simple que verifique si un archivo existe y muestre su tamaño.
#include <iostream>
#include <boost/filesystem.hpp>
namespace fs = boost::filesystem;
int main() {
// Ruta al archivo
fs::path ruta_archivo("ejemplo.txt");
// Verifica si el archivo existe
if (fs::exists(ruta_archivo)) {
// Obtiene el tamaño del archivo
uintmax_t tamano_archivo = fs::file_size(ruta_archivo);
std::cout << "Archivo: " << ruta_archivo.filename() << std::endl;
std::cout << "Tamaño: " << tamano_archivo << " bytes" << std::endl;
} else {
std::cout << "Archivo no encontrado." << std::endl;
}
return 0;
}
Este código demuestra tres capacidades clave: crear un objeto de ruta (fs::path), verificar la existencia de un archivo (fs::exists) y obtener su tamaño
También en la biblioteca
Trabajo con fechas en Rust: revisión de bibliotecas para tiempo y calendario
Crow C++: guía completa con ejemplos prácticos
Observation en Swift: guía completa con ejemplos prácticos
Trabajo con imágenes en C++: bibliotecas CImg y STB Image