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 (один или несколько элементов для каждого символа).POSIX использует последовательность
char
, завершаемую значением NULL, закодированную как UTF-8 (один или несколько элементов для каждого символа).Объект класса
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_separator
path
данных.
Наконец, объекты имеют важную функцию: их можно использовать везде, 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>
Операторы
Перечисления
Имя | Описание |
---|---|
copy_options |
Перечисление, используемое с функцией copy_file, которое определяет поведение в случае, если конечный файл уже существует. |
directory_options |
Перечисление, указывающее параметры итераторов каталога. |
file_type |
Перечисление для типов файлов. |
perm_options |
Перечисляет параметры функции permissions . |
perms |
Тип битовой маски, используемый для передачи разрешений и параметров для разрешений. |