Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Включите заголовок <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 |
Тип битовой маски, используемый для передачи разрешений и параметров для разрешений. |