filesystem

Includere l'intestazione <filesystem> per l'accesso a classi e funzioni che modificano e recuperano informazioni su percorsi, file e directory.

Sintassi

#include <filesystem> // C++17 standard header file name
#include <experimental/filesystem> // Header file for pre-standard implementation
using namespace std::experimental::filesystem::v1;

Importante

Al rilascio di Visual Studio 2017, l'intestazione <filesystem> non era ancora uno standard C++. C++ in Visual Studio 2017 RTW implementa lo standard di bozza finale, disponibile in ISO/IEC JTC 1/SC 22/WG 21 N4100. Visual Studio 2017 versione 15.7 e successive supporta il nuovo standard C++17 <filesystem> . Si tratta di un'implementazione completamente nuova, incompatibile con la versione precedente std::experimental . È stato reso necessario dal supporto dei collegamenti simbolici, dalle correzioni di bug e dalle modifiche nel comportamento richiesto standard. In Visual Studio 2019 versione 16.3 e successive, incluso il <filesystem> nuovo std::filesystem. L'inclusione <experimental/filesystem> fornisce solo l'implementazione precedente experimental . L'implementazione experimental verrà rimossa nella prossima versione di interruzione ABI delle librerie.

Questa intestazione supporta i file system per una delle due classi generali dei sistemi operativi host: Microsoft Windows e POSIX.

Mentre la maggior parte delle funzionalità sono comuni a entrambi i sistemi operativi, questo documento ne identifica le differenze. Ad esempio:

  • Windows supporta più nomi radice, ad esempio c: o \\network_name. Un file system è costituito da una foresta di alberi, ognuna con la propria directory radice, ad esempio c:\ o \\network_name\, e ognuna con la propria directory corrente, per completare un percorso relativo (uno che non è un percorso assoluto).

  • POSIX supporta un singolo albero, senza nome radice, la singola directory /radice e una singola directory corrente.

Un'altra differenza significativa è la rappresentazione nativa dei nomi di percorso:

  • Windows usa una sequenza con terminazione Null di wchar_t, codificata come UTF-16 (uno o più elementi per ogni carattere).

  • POSIX usa una sequenza con terminazione Null di char, codificata come UTF-8 (uno o più elementi per ogni carattere).

  • Un oggetto della classe path archivia il percorso in formato nativo, ma supporta una semplice conversione tra questo modulo archiviato e diversi moduli esterni:

    • Sequenza con terminazione Null di char, codificata come preferita dal sistema operativo.

    • Sequenza con terminazione Null di char, codificata come UTF-8.

    • Sequenza con terminazione Null di wchar_t, codificata come preferita dal sistema operativo.

    • Sequenza con terminazione Null di char16_t, codificata come UTF-16.

    • Sequenza con terminazione Null di char32_t, codificata come UTF-32.

    Le conversioni reciproche tra queste rappresentazioni vengono mediate, come necessario, dall'uso di uno o più facet codecvt. Se non viene specificato alcun oggetto delle impostazioni locali specifico, questi facet vengono ottenuti dalle impostazioni locali globali.

Un'altra differenza sta nel dettaglio con cui ogni sistema operativo consente di specificare le autorizzazioni di accesso a file o directory:

  • Windows registra se un file è di sola lettura o scrivibile, un attributo che non ha alcun significato per le directory.

  • POSIX registra se un file può essere letto, scritto o eseguito (analizzato, se una directory). E, indipendentemente dal fatto che ogni operazione sia consentita per il proprietario, il gruppo del proprietario o per tutti, più alcune altre autorizzazioni.

Comuni a entrambi i sistemi è la struttura imposta a un percorso dopo aver ignorato il nome radice. Per pathname c:/abc/xyz/def.ext:

  • Il nome radice è c:.

  • La directory radice è /.

  • Il percorso radice è c:/.

  • Il percorso relativo è abc/xyz/def.ext.

  • Il percorso padre è c:/abc/xyz.

  • Il nome file è def.ext.

  • Il gambo è def.

  • L'estensione è .ext.

Una differenza minore è il separatore preferito tra la sequenza di directory in un pathname. Entrambi i sistemi operativi consentono di scrivere una barra /, ma in alcuni contesti Windows preferisce una barra rovesciata \. L'implementazione archivia il separatore preferito nel membro preferred_separator dati in path.

Infine, gli path oggetti hanno una funzionalità importante: è possibile usarli ovunque sia necessario un argomento nome file nelle classi definite nell'intestazione <fstream>.

Per altre informazioni ed esempi di codice, vedere Navigazione nel file system (C++).

Membri

Classi

Nome Descrizione
Classe directory_entry Descrive un oggetto restituito da un directory_iterator oggetto o recursive_directory_iterator e contiene un oggetto path.
Classe directory_iterator Descrive un iteratore di input sequenziato attraverso i nomi file in una directory del file system.
Classe filesystem_error Classe di base per le eccezioni generate per segnalare un overflow del sistema di basso livello.
Classe path Definisce una classe che archivia un oggetto di tipo modello String che può essere usato come nome file.
Classe recursive_directory_iterator Descrive un iteratore di input sequenziato attraverso i nomi file in una directory del file system. L'iteratore può anche accedere alle sottodirectory.
Classe file_status Esegue il wrapping di un file_type.

Struct

Nome Descrizione
space_info struttura Contiene informazioni su un volume.

Funzioni

Funzioni <filesystem>

Operatori

<filesystem> Operatori

Enumerazioni

Nome Descrizione
copy_options Enumerazione usata con copy_file che determina il comportamento nel caso in cui un file di destinazione esista già.
directory_options Enumerazione che specifica le opzioni per gli iteratori di directory.
file_type Enumerazione di tipi di file.
perm_options Enumera le opzioni per la permissions funzione.
perms Un tipo di maschera di bit usato per trasferire le autorizzazioni e le opzioni per le autorizzazioni

Vedi anche

Informazioni di riferimento per i file di intestazione