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 usando std::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.