Sdílet prostřednictvím


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říklad c:\ 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_ts ukončenou hodnotou null , zakódovanou jako UTF-16 (jeden nebo více prvků pro každý charaktér).

  • POSIX používá sekvenci chars ukončenou hodnotou null , zakódovanou jako UTF-8 (jeden nebo více prvků pro každý charaktér).

  • 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 chars ukončenou hodnotou null , kódovaná jako upřednostňovaná operačním systémem.

    • Sekvence chars ukončenou hodnotou null , kódovaná jako UTF-8.

    • Sekvence wchar_ts ukončenou hodnotou null , kódovaná jako upřednostňovaná operačním systémem.

    • Sekvence char16_ts ukončenou hodnotou null , kódovaná jako UTF-16.

    • Sekvence char32_ts 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

Jméno popis
Třída directory_entry Popisuje objekt, který je vrácen nebo directory_iteratorrecursive_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

Jméno popis
space_info Struktury Obsahuje informace o svazku.

Funkce

<filesystem> – funkce

Operátory

<filesystem> – operátory

Výčty

Jméno 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í

Viz také

Referenční informace k souborům hlaviček