filesystem
Zahrňte hlavičku <filesystem>
pro přístup ke třídám a funkcím, které manipulují a načítají informace o cestách, souborech a adresářích.
Syntaxe
#include <filesystem> // C++17 standard header file name
#include <experimental/filesystem> // Header file for pre-standard implementation
using namespace std::experimental::filesystem::v1;
Důležité
Ve verzi sady Visual Studio 2017 <filesystem>
ještě hlavička nebyla standardem C++. C++ v sadě Visual Studio 2017 RTW implementuje finální normu konceptu, kterou najdete v ISO/IEC JTC 1/SC 22/WG 21 N4100. Visual Studio 2017 verze 15.7 a novější podporuje nový standard C++17 <filesystem>
.
Jedná se o zcela novou implementaci nekompatibilní s předchozí std::experimental
verzí. Bylo nutné provést podporu symlinku, opravy chyb a změny standardního chování. V sadě Visual Studio 2019 verze 16.3 a novější, včetně toho, že <filesystem>
poskytuje pouze nové std::filesystem
. Zahrnutí <experimental/filesystem>
poskytuje pouze starou experimental implementaci. Implementace experimental se odebere v příští vydané verzi knihovny ABI.
Tato hlavička podporuje systémy souborů pro jednu ze dvou širokých tříd hostitelských operačních systémů: Microsoft Windows a POSIX.
I když je většina funkcí pro oba operační systémy společná, tento dokument identifikuje, kde dochází k rozdílům. Příklad:
Systém Windows podporuje více kořenových názvů, například
c:
.\\network_name
Systém souborů se skládá z doménové struktury stromů, z nichž každý má vlastní kořenový adresář, napříkladc:\
nebo\\network_name\
, a každý s vlastním aktuálním adresářem pro dokončení relativního názvu cesty (ten není absolutním názvem cesty).POSIX podporuje jeden strom, bez kořenového názvu, jednoho kořenového adresáře
/
a jednoho aktuálního adresáře.
Dalším významným rozdílem je nativní reprezentace názvů pathname:
Systém Windows používá sekvenci
wchar_t
s ukončenou hodnotou null , kódovanou jako UTF-16 (jeden nebo více prvků pro každý znak).POSIX používá sekvenci
char
s ukončenou hodnotou null , zakódovanou jako UTF-8 (jeden nebo více prvků pro každý znak).Objekt třídy
path
ukládá název cesty v nativním formuláři, ale podporuje snadný převod mezi tímto uloženým formulářem a několika externími formuláři:Sekvence
char
s ukončenou hodnotou null , kódovaná jako upřednostňovaná operačním systémem.Sekvence
char
s ukončenou hodnotou null , kódovaná jako UTF-8.Sekvence
wchar_t
s ukončenou hodnotou null , kódovaná jako upřednostňovaná operačním systémem.Sekvence
char16_t
s ukončenou hodnotou null , kódovaná jako UTF-16.Sekvence
char32_t
s ukončenou hodnotou null , kódovaná jako UTF-32.
Mezikonverze mezi těmito reprezentacemi jsou podle potřeby meditovány použitím jedné nebo více
codecvt
omezujících vlastností. Pokud není zadán žádný konkrétní objekt národního prostředí, tyto omezující vlastnosti jsou získány z globálního národního prostředí.
Dalším rozdílem je podrobnosti, se kterými jednotlivé operační systémy umožňují zadat přístupová oprávnění k souborům nebo adresářům:
Systém Windows zaznamenává, zda je soubor jen pro čtení nebo zapisovatelný, atribut, který nemá význam pro adresáře.
POSIX zaznamenává, zda lze soubor číst, zapisovat nebo spouštět (naskenovaný, pokud adresář). A jestli je každá operace povolená pro vlastníka, skupinu vlastníka nebo pro všechny, a navíc několik dalších oprávnění.
Společné pro oba systémy je struktura uložená na název cesty, jakmile se dostanete za kořenový název. Pro název cesty c:/abc/xyz/def.ext
:
Kořenový název je
c:
.Kořenový adresář je
/
.Kořenová cesta je
c:/
.Relativní cesta je
abc/xyz/def.ext
.Nadřazená cesta je
c:/abc/xyz
.Název souboru je
def.ext
.Kmen je
def
.Rozšíření je
.ext
.
Menší rozdíl je upřednostňovaným oddělovačem mezi sekvencí adresářů v názvu cesty. Oba operační systémy umožňují psát lomítko /
, ale v některých kontextech Windows preferuje zpětné lomítko \
. Implementace ukládá upřednostňovaný oddělovač do datového členu preferred_separator
v path
.
path
A konečně, objekty mají důležitou funkci: Můžete je použít všude, kde je argument název souboru požadován ve třídách definovaných v záhlaví <fstream>
.
Další informace a příklady kódu najdete v tématu Navigace v systému souborů (C++).
Členové
Třídy
Název | Popis |
---|---|
Třída directory_entry |
Popisuje objekt, který je vrácen nebo directory_iterator recursive_directory_iterator a obsahuje path . |
Třída directory_iterator |
Popisuje vstupní iterátor, který sekvencuje názvy souborů v adresáři systému souborů. |
Třída filesystem_error |
Základní třída pro výjimky, které jsou vyvolány k hlášení přetečení systému nízké úrovně. |
Třída path |
Definuje třídu, která ukládá objekt typu String šablony, který je vhodný pro použití jako název souboru. |
Třída recursive_directory_iterator |
Popisuje vstupní iterátor, který sekvencuje názvy souborů v adresáři systému souborů. Iterátor může také sestupně do podadresářů. |
Třída file_status |
Zabalí ...file_type |
Struktury
Název | Popis |
---|---|
space_info struktura |
Obsahuje informace o svazku. |
Funkce
Operátory
Výčty
Název | Popis |
---|---|
copy_options |
Výčet, který se používá s copy_file a určuje chování, pokud cílový soubor již existuje. |
directory_options |
Výčet, který určuje možnosti pro iterátory adresáře. |
file_type |
Výčet pro typy souborů. |
perm_options |
Vytvoří výčet možností pro permissions funkci. |
perms |
Typ bitové masky používaný ke sdělení oprávnění a možností oprávnění |