Boost.Filesystem para C++: Guia Completo para Trabalhar com o Sistema de Arquivos
Boost.Filesystem é uma biblioteca C++ madura e poderosa que oferece uma interface portátil (multiplataforma) para realizar operações com o sistema de arquivos. Ela faz parte da coleção de bibliotecas Boost e, essencialmente, serviu como protótipo para a biblioteca padrão <filesystem> do C++17. Se você trabalha com C++11 ou C++14 e precisa de uma ferramenta confiável e testada pelo tempo para lidar com caminhos, arquivos e diretórios, o Boost.Filesystem é a sua escolha.
Por que ela é necessária? Por muito tempo, o C++ padrão não tinha meios nativos para tarefas simples como verificar se um arquivo existe, criar um diretório ou percorrer pastas recursivamente. Os desenvolvedores precisavam usar stat() no Linux ou GetFileAttributes() no Windows, o que tornava o código não portátil. O Boost.Filesystem resolve esse problema fornecendo uma API unificada que funciona da mesma forma em todas as principais plataformas. A biblioteca encapsula chamadas de sistema, lida com codificações de caminho (por exemplo, UTF-8 no Linux e UTF-16 no Windows) e oferece classes convenientes para trabalhar com caminhos e iterar sobre diretórios.
Neste artigo, vamos detalhar a instalação da biblioteca, as principais classes e métodos, e também apresentar um exemplo prático real que você poderá usar em seus projetos. Vamos nos concentrar na versão Boost 1.84 (a mais recente no momento da escrita), mas os exemplos funcionarão com versões mais antigas também.
Instalação do Boost.Filesystem
Ao contrário de linguagens com gerenciadores de pacotes (npm, pip), o C++ exige a compilação das bibliotecas. O Boost.Filesystem é uma biblioteca "header-only" apenas para algumas partes; para trabalhar com arquivos, é necessária uma biblioteca compilada (libboost_filesystem).
Instalação via gerenciador de pacotes (recomendado)
Ubuntu/Debian (Linux):
sudo apt update
sudo apt install libboost-filesystem-dev
macOS (Homebrew):
brew install boost
Windows (vcpkg):
vcpkg install boost-filesystem
Compilação a partir do código fonte (se não houver gerenciador de pacotes)
# Baixe o Boost do site 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
# Execute o bootstrap
./bootstrap.sh
# Compile apenas a biblioteca filesystem (economiza tempo)
./b2 --with-filesystem
# Instale (geralmente em /usr/local)
sudo ./b2 install
Compilação do projeto com Boost.Filesystem
Ao compilar, é necessário especificar o caminho para os arquivos de cabeçalho e fazer a linkagem com a biblioteca:
g++ -std=c++11 -I/caminho/para/boost main.cpp -lboost_filesystem -lboost_system -o meu_programa
Início Rápido: Exemplo Mínimo Funcional
Vamos escrever um programa simples que verifica se um arquivo existe e exibe seu tamanho.
#include <iostream>
#include <boost/filesystem.hpp>
namespace fs = boost::filesystem;
int main() {
// Caminho para o arquivo
fs::path caminho_arquivo("exemplo.txt");
// Verifica se o arquivo existe
if (fs::exists(caminho_arquivo)) {
// Obtém o tamanho do arquivo
uintmax_t tamanho_arquivo = fs::file_size(caminho_arquivo);
std::cout << "Arquivo: " << caminho_arquivo.filename() << std::endl;
std::cout << "Tamanho: " << tamanho_arquivo << " bytes" << std::endl;
} else {
std::cout << "Arquivo não encontrado." << std::endl;
}
return 0;
}
Este código demonstra três funcionalidades principais: criar um objeto de caminho (fs::path), verificar a existência de um arquivo (fs::exists) e obter seu tamanho
Também na biblioteca
Processamento de Imagens em Kotlin: redimensionar e cortar com a biblioteca ImageMagick
Parsing de HTML em Swift (iOS/macOS): biblioteca SwiftSoup
Hilt/Dagger para Kotlin: guia completo com exemplos