Manipulação do sistema de ficheiros
A biblioteca <filesystem>, introduzida no C++17, permite manipular pastas (diretórios) e arquivos de forma moderna, portátil e segura. Com ela, você pode criar, remover, listar e verificar diretórios com poucas linhas de código.
1. Configuração Inicial
Inclua o cabeçalho e defina um alias para facilitar o uso:
#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
using namespace std;
2. Criar Diretórios
Para criar um novo diretório:
fs::create_directory("minha_pasta");
Para criar múltiplos diretórios (inclusive subpastas):
fs::create_directories("pasta_principal/subpasta1/subpasta2");
Se o diretório já existir, nada acontece.
3. Verificar Existência e Tipo
Verifique se um caminho existe e se é uma pasta:
fs::path caminho = "minha_pasta";
if (fs::exists(caminho)) {
if (fs::is_directory(caminho)) {
cout << "É uma pasta." << endl;
} else {
cout << "Existe, mas não é uma pasta." << endl;
}
} else {
cout << "Caminho não existe." << endl;
}
4. Listar Conteúdo de uma Pasta
Para listar todos os arquivos e subpastas de um diretório:
string pasta = ".";
for (const auto& entry : fs::directory_iterator(pasta)) {
cout << entry.path().filename() << endl;
}
Esse exemplo lista o conteúdo do diretório atual.
5. Remover Pastas
Para remover uma pasta vazia:
fs::remove("minha_pasta");
Para remover uma pasta e todo o seu conteúdo (recursivamente):
fs::remove_all("pasta_principal");
O valor retornado indica quantos arquivos e pastas foram removidos.
6. Exemplo Completo
#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
using namespace std;
int main() {
// Criar diretório
fs::create_directory("exemplo");
// Criar subdiretórios
fs::create_directories("exemplo/sub1/sub2");
// Verificar existência
if (fs::exists("exemplo/sub1")) {
cout << "sub1 existe!" << endl;
}
// Listar conteúdo
cout << "Conteúdo da pasta 'exemplo':" << endl;
for (const auto& entry : fs::directory_iterator("exemplo")) {
cout << " - " << entry.path().filename() << endl;
}
// Remover tudo
fs::remove_all("exemplo");
cout << "Pasta 'exemplo' e subpastas removidas." << endl;
return 0;
}
7. Observações
- Para compilar, use C++17 ou superior:
g++ -std=c++17 seu_codigo.cpp -o seu_programa - A biblioteca
<filesystem>é multiplataforma. - Consulte sempre a documentação oficial para detalhes e funções avançadas.
8. Recursos Adicionais
- Ordenação dos arquivos pode ser feita copiando os caminhos para um
vector<fs::directory_entry>e usandostd::sort. - Para operações recursivas (listar tudo dentro de subpastas), use
fs::recursive_directory_iterator.
A biblioteca <filesystem> torna a manipulação de pastas em C++ simples, segura e moderna, sem depender de funções específicas de cada sistema operacional.
