<filesystem>

Para o código atual, inclua o cabeçalho <filesystem> padrão C++17 e use o std::filesystem namespace para classes e funções que manipulam e recuperam informações sobre caminhos, arquivos e diretórios. Compile com /std:c++17 ou posterior.

Sintaxe

#include <filesystem> // C++17 standard header file name
using namespace std::filesystem;

Note

Observação histórica: antes do C++17 padronizado <filesystem>, o MSVC enviava uma implementação de pré-lançamento separada no <experimental/filesystem> cabeçalho, que foi removido a partir das Ferramentas de Build do MSVC versão 14.51. Para obter sua documentação, consulte <experimental/filesystem>.

O <filesystem> cabeçalho dá suporte a sistemas de arquivos para Microsoft Windows e POSIX.

Enquanto a maioria das funcionalidades são comuns para ambos os sistemas operacionais, este documento identifica onde ocorrem as diferenças. Por exemplo:

  • O Windows dá suporte a vários nomes de raiz, como c: ou \\network_name. Um sistema de arquivos consiste em uma floresta de árvores, cada uma com o próprio diretório raiz, como c:\ ou \\network_name\, e cada uma com um diretório próprio atual, para completar um nome de caminho relativo (que não é um nome de caminho absoluto).
  • O POSIX dá suporte a apenas uma árvore, sem nome de raiz, o único diretório raiz / e apenas um diretório atual.

Outra diferença significativa é a representação nativa dos nomes de caminho:

  • O Windows usa uma sequência terminada em nulo de wchar_t, codificada como UTF-16 (um ou mais elementos para cada caractere).

  • POSIX usa uma sequência terminada em nulo de char, codificada como UTF-8 (um ou mais elementos para cada caractere).

  • Um objeto da classe path armazena o nome do caminho no formato nativo, mas dá suporte à conversão fácil entre esse formato armazenado e vários formatos externos:

    • Uma sequência de terminação nula de char, codificada como preferencial para o sistema operacional.
    • Uma sequência de terminação nula de char, codificada como UTF-8.
    • Uma sequência de terminação nula de wchar_t, codificada como preferencial para o sistema operacional.
    • Uma sequência de terminação nula de char16_t, codificada como UTF-16.
    • Uma sequência de terminação nula de char32_t, codificada como UTF-32.

    Interconversões entre essas representações são mediadas, conforme necessário, pelo uso de uma ou mais facetas de codecvt. Se nenhum objeto de localidade específico tiver sido designado, essas facetas serão obtidas da localidade global.

Outra diferença é o detalhamento com que cada sistema operacional permite especificar permissões de acesso de arquivo ou diretório:

  • O Windows registra se um arquivo é somente leitura ou gravável, um atributo que não tem nenhum significado para diretórios.
  • O POSIX registra se um arquivo pode ser lido, gravado ou executado (verificado se for um diretório). Ele registra também se cada operação é permitida para o proprietário, o grupo do proprietário ou para todos, além de algumas outras permissões.

É comum aos dois sistemas a estrutura imposta a um nome de caminho quando você passar do nome da raiz. Para o nome do caminho c:/abc/xyz/def.ext:

  • O nome da raiz é c:.
  • O diretório raiz é /.
  • O caminho raiz é c:/.
  • O caminho relativo é abc/xyz/def.ext.
  • O caminho pai é c:/abc/xyz.
  • O nome do arquivo é def.ext.
  • O stem é def.
  • A extensão é .ext.

Uma pequena diferença é o separador preferencial entre a sequência de diretórios em um nome de caminho. Os dois sistemas operacionais permitem escrever uma barra /, mas em alguns contextos o Windows prefere uma barra invertida \. A implementação armazena o separador preferencial dela no membro de dados preferred_separator em path.

Por fim, objetos path têm um recurso importante: você pode usá-los sempre que um argumento de nome de arquivo for necessário nas classes definidas no cabeçalho <fstream>.

Para obter mais informações e exemplos de código, confira Navegação do sistema de arquivos (C++).

Classes

Nome Descrição
directory_entry classe Descreve um objeto retornado por um directory_iterator ou um recursive_directory_iterator e contém um path.
directory_iterator classe Descreve um iterador de entrada que percorre em sequência os nomes de arquivo no diretório de um sistema de arquivos.
filesystem_error classe Uma classe base para exceções que são lançadas para relatar um erro de sistema de baixo nível.
path classe Define uma classe que armazena um objeto do tipo de modelo String que é adequado para uso como um nome de arquivo.
recursive_directory_iterator classe Descreve um iterador de entrada que percorre em sequência os nomes de arquivo no diretório de um sistema de arquivos. O iterador também pode descer para subdiretórios.
file_status classe Encapsula um file_type.

Estruturas

Nome Descrição
Estrutura space_info Mantém informações sobre um volume.

Functions

Funções <filesystem>

Operadores

Operadores <filesystem>

Enumerações

Nome Descrição
copy_options Uma enumeração que é usada com copy_file e determina o comportamento se um arquivo de destino já existir.
directory_options Uma enumeração que especifica opções para iteradores de diretório.
file_type Uma enumeração de tipos de arquivo.
perm_options Enumera opções para a função permissions.
perms Um tipo de bitmask usado para transmitir permissões e opções de permissões

Confira também

Referência de arquivos de cabeçalho