filesystem

Включите заголовок <filesystem> для доступа к классам и функциям, которые управляют и извлекают сведения о путях, файлах и каталогах.

Синтаксис

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

Важно!

В выпуске Visual Studio 2017 <filesystem> заголовок еще не был стандартом C++. C++ в Visual Studio 2017 RTW реализует окончательный проект стандарта, найденный в ISO/IEC JTC 1/SC 22/WG 21 N4100. Visual Studio 2017 версии 15.7 и более поздних версий поддерживает новый стандарт C++17 <filesystem> . Это совершенно новая реализация, несовместимая с предыдущей std::experimental версией. Она была необходима благодаря поддержке асимметричных ссылок, исправлениям ошибок и изменениям в стандартном поведении. В Visual Studio 2019 версии 16.3 и более поздних версиях, включая <filesystem> только новые std::filesystem. Включая <experimental/filesystem> только старую experimental реализацию. Реализация experimental будет удалена в следующем выпуске ABI-критических выпусков библиотек.

Этот заголовок поддерживает файловые системы для одного из двух широких классов операционных систем узла: Microsoft Windows и POSIX.

Хотя большинство функций являются общими для обеих операционных систем, в этом документе указываются некоторые отличия. Например:

  • Windows поддерживает несколько корневых имен, например c: или \\network_name. Файловая система состоит из леса деревьев, каждый из которых имеет собственный корневой каталог, например c:\ или \\network_name\, и каждый из них с собственным текущим каталогом для завершения относительного имени пути (одно из которых не является абсолютным именем пути).

  • POSIX поддерживает одно дерево без корневого имени, одного корневого каталога /и одного текущего каталога.

Другое важное отличие состоит в представлении путей:

  • Windows использует последовательность wchar_t, завершаемую значением NULL, закодированную как UTF-16 (один или несколько элементов для каждого charактера).

  • POSIX использует последовательность char, завершаемую значением NULL, закодированную как UTF-8 (один или несколько элементов для каждого charактера).

  • Объект класса path сохраняет имя пути в собственной форме, но поддерживает простое преобразование между этой хранимой формой и несколькими внешними формами:

    • Последовательность char, завершаемая значением NULL, закодирована в качестве предпочитаемой операционной системой.

    • Последовательность char, завершаемая значением NULL, закодирована как UTF-8.

    • Последовательность wchar_t, завершаемая значением NULL, закодирована в качестве предпочитаемой операционной системой.

    • Последовательность char16_t, завершаемая значением NULL, закодирована как UTF-16.

    • Последовательность char32_t, завершаемая значением NULL, закодирована как UTF-32.

    Взаимные преобразования между этими представлениями выполняются по мере необходимости с помощью одного или нескольких аспектов codecvt. Если определенный объект языкового стандарта не указан, эти аспекты получаются из глобального языкового стандарта.

Еще одно различие заключается в степени детализации, с которой каждая операционная система позволяет указать разрешения доступа к файлу или каталогу.

  • Windows записывает, доступен ли файл только для чтения или доступен для записи, атрибут, который не имеет значения для каталогов.

  • POSIX записывает данные о том, может ли файл быть прочитан, записан или выполнен (сканирован, если каталог). И, независимо от того, разрешена ли каждая операция для владельца, группы владельца или для всех, а также несколько других разрешений.

Общей характеристикой обеих систем является структура, применяемая к пути после корневого имени. Для имени пути c:/abc/xyz/def.ext:

  • Корневое имя c:— .

  • Корневой каталог ./

  • Корневой путь — c:/это .

  • Относительный путь .abc/xyz/def.ext

  • Родительский путь — c:/abc/xyzэто .

  • Имя def.extфайла — .

  • Стебль .def

  • Расширение ..ext

Дополнительное различие — это предпочтительный разделитель между последовательностью каталогов в имени пути. Обе операционные системы позволяют писать косую черту /вперед, но в некоторых контекстах Windows предпочитает обратную косую черту \. Реализация сохраняет предпочтительный разделитель в элементе preferred_separatorpathданных.

Наконец, объекты имеют важную функцию: их можно использовать везде, path где требуется аргумент имени файла в классах, определенных в заголовке <fstream>.

Дополнительные сведения и примеры кода см. в разделе "Навигация файловой системы" (C++).

Участники

Классы

Имя Описание
Класс directory_entry Описывает объект, возвращаемый или directory_iterator содержащий recursive_directory_iterator объект path.
Класс directory_iterator Описывает итератор ввода, выполняющий последовательный перебор имен файлов в каталоге файловой системы.
Класс filesystem_error Базовый класс для исключений, создаваемых для отчета о переполнении системы низкого уровня.
Класс path Определяет класс, который хранит объект типа шаблона String , пригодный для использования в качестве имени файла.
Класс recursive_directory_iterator Описывает итератор ввода, выполняющий последовательный перебор имен файлов в каталоге файловой системы. Итератор может также просматривать подкаталоги.
Класс file_status Создает оболочку для file_type.

Структуры

Имя Описание
Структура space_info Содержит сведения о томе.

Функции

Функции <filesystem>

Операторы

Операторы <filesystem>

Перечисления

Имя Описание
copy_options Перечисление, используемое с функцией copy_file, которое определяет поведение в случае, если конечный файл уже существует.
directory_options Перечисление, указывающее параметры итераторов каталога.
file_type Перечисление для типов файлов.
perm_options Перечисляет параметры функции permissions .
perms Тип битовой маски, используемый для передачи разрешений и параметров для разрешений.

См. также

Справочник по файлам заголовков