<filesystem>

Para 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, ficheiros e diretórios. Compilar com /std:c++17 ou mais tarde.

Sintaxe

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

Note

Nota histórica: Antes da padronização <filesystem>do C++17, o MSVC incluía uma implementação pré-padrão separada no <experimental/filesystem> cabeçalho, que foi removida a partir da versão 14.51 do MSVC Build Tools. Para a sua documentação, veja <experimental/filesystem>.

O <filesystem> cabeçalho suporta sistemas de ficheiros para Microsoft Windows e POSIX.

Embora a maioria das funcionalidades seja comum a ambos os sistemas operativos, este documento identifica onde ocorrem diferenças. Por exemplo:

  • O Windows suporta múltiplos nomes raiz, como c: ou \\network_name. Um sistema de ficheiros consiste numa floresta de árvores, cada uma com o seu próprio diretório raiz, como c:\ ou \\network_name\, e cada uma com o seu próprio diretório atual, para completar um nome de caminho relativo (um que não é um nome de caminho absoluto).
  • O POSIX suporta uma única árvore, sem nome raiz, o diretório /raiz único e um único diretório atual.

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

  • O Windows utiliza uma sequência terminada nula de wchar_t, codificada como UTF-16 (um ou mais elementos para cada carácter).

  • O POSIX utiliza uma sequência terminada por nulo de char, codificada como UTF-8 (um ou mais elementos para cada carácter).

  • Um objeto da classe path armazena o nome do caminho em forma nativa, mas suporta uma conversão fácil entre esta forma armazenada e várias formas externas:

    • Uma sequência terminada por nulo de char, codificada conforme preferido pelo sistema operativo.
    • Uma sequência terminada por nulo de char, codificada como UTF-8.
    • Uma sequência terminada por nulo de wchar_t, codificada conforme preferido pelo sistema operativo.
    • Uma sequência terminada por nulo de char16_t, codificada como UTF-16.
    • Uma sequência terminada nula de char32_t, codificada como UTF-32.

    As interconversões entre estas representações são mediadas, conforme necessário, pelo uso de uma ou mais codecvt facetas. Se não for especificado nenhum objeto local específico, estas facetas são obtidas a partir do local global.

Outra diferença é o detalhe com que cada sistema operativo permite especificar permissões de acesso a ficheiros ou diretórios:

  • O Windows regista se um ficheiro é só de leitura ou gravável, um atributo que não tem significado para diretórios.
  • O POSIX regista se um ficheiro pode ser lido, escrito ou executado (varrido, se for um diretório). E, se cada operação é permitida para o proprietário, para o grupo do proprietário ou para todos, além de algumas outras permissões.

Comum a ambos os sistemas é a estrutura imposta a um nome de caminho depois de ultrapassar o nome raiz. Para o nome c:/abc/xyz/def.extdo caminho:

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

Uma diferença menor é o separador preferido entre a sequência de diretórios num nome de caminho. Ambos os sistemas operativos permitem escrever uma barra /diagonal para a frente, mas em alguns contextos o Windows prefere uma barra \inversa. A implementação armazena o seu separador preferido no elemento preferred_separator de dados em path.

Finalmente, path os objetos têm uma funcionalidade importante: pode usá-los sempre que um argumento de nome de ficheiro seja necessário nas classes definidas no cabeçalho <fstream>.

Para mais informações e exemplos de código, veja Navegação por sistema de ficheiros (C++).

Aulas

Name Descrição
directory_entry Classe Descreve um objeto que é devolvido por a directory_iterator ou a recursive_directory_iterator e contém um path.
directory_iterator Classe Descreve um iterador de entrada que sequencia os nomes dos ficheiros num diretório do sistema de ficheiros.
filesystem_error Classe Uma classe base para exceções que são lançadas para reportar um erro de sistema de baixo nível.
path Classe Define uma classe que armazena um objeto do tipo String template adequado para uso como nome de ficheiro.
recursive_directory_iterator Classe Descreve um iterador de entrada que sequencia os nomes dos ficheiros num diretório do sistema de ficheiros. O iterador também pode descer para subdiretórios.
file_status Classe Envolve um file_type.

Estruturas

Name Descrição
space_info Estrutura Contém informação sobre um volume.

Funções

<filesystem> funções

Operators

<filesystem> Operadores

Enumerations

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

Ver também

Referência de ficheiros de cabeçalho