Библиотека файловой системы (начиная с C++17)
Библиотека файловой системы предоставляет средства для выполнения операций с файловыми системами и их компонентами, такими как пути, обычные файлы и каталоги.
Изначально библиотека файловой системы была разработана как boost.filesystem, опубликована как техническая спецификация ISO/IEC TS 18822:2015, а затем вошла в стандарт ISO C++ начиная с C++17. Реализация Boost в настоящее время доступна для большего числа компиляторов и платформ, чем библиотека C++17.
Средства библиотеки файловой системы могут быть недоступны, если реализация не имеет доступа к иерархической файловой системе или если та не предоставляет необходимые возможности. Некоторые функции могут быть недоступны, если они не поддерживаются нижележащей файловой системой (например, файловая система FAT не поддерживает символические ссылки и запрещает несколько жёстких ссылок). В таких случаях необходимо сообщать об ошибках.
Поведение является неопределённым, если вызовы функций этой библиотеки приводят к гонке файловой системы, то есть когда несколько потоков, процессов или компьютеров чередуют доступ к одному и тому же объекту файловой системы и его изменение.
Определения, общие для библиотеки
- файл: объект файловой системы, содержащий данные, в который можно записывать данные, из которого можно считывать данные или выполнять обе операции. У файлов есть имена, атрибуты, один из которых — тип файла:
-
каталог: файл, который служит контейнером для записей каталога, идентифицирующих другие файлы (некоторые из них могут быть другими, вложенными каталогами). Если речь идёт о конкретном файле, каталог, в котором он представлен в виде записи, называется его родительским каталогом. Родительский каталог может быть представлен относительным путём
"..". - обычный файл: запись каталога, связывающая имя с существующим файлом (то есть жёсткая ссылка). Если поддерживается несколько жёстких ссылок, файл удаляется после удаления последней жёсткой ссылки на него.
- символическая ссылка: запись каталога, связывающая имя с путём, который может существовать или не существовать.
- другие специальные типы файлов: блочное устройство, символьное устройство, именованный канал, сокет.
-
имя файла: строка символов, задающая имя файла. Допустимые символы, чувствительность к регистру, максимальная длина и недопустимые имена определяются реализацией. Имена
"."(точка) и".."(две точки) имеют особое значение на уровне библиотеки. -
путь: последовательность элементов, идентифицирующая файл. Он начинается с необязательного имени корня (например,
"C:"или"//server"в Windows), за которым следует необязательный корневой каталог (например,"/"в Unix), а затем последовательность из нуля или более имён файлов (все, кроме последнего, должны быть каталогами или ссылками на каталоги). Собственный формат (например, используемые в качестве разделителей символы) и кодировка символьного представления пути (имени пути) определяются реализацией; эта библиотека предоставляет переносимое представление путей. - абсолютный путь: путь, однозначно определяющий расположение файла.
-
канонический путь: абсолютный путь, не содержащий символических ссылок, элементов
"."или"..". -
относительный путь: путь, определяющий расположение файла относительно некоторого места в файловой системе. Специальные имена путей
"."(точка, «текущий каталог») и".."(две точки, «родительский каталог») являются относительными путями.
Классы |
|
Определено в заголовке <filesystem> |
|
|---|---|
Определено в пространстве имён std::filesystem |
|
|
(C++17) | представляет путь (класс) |
|
(C++17) | исключение, выбрасываемое при ошибках файловой системы (класс) |
|
(C++17) | запись каталога (класс) |
|
(C++17) | итератор по содержимому каталога (класс) |
|
(C++17) | итератор по содержимому каталога и его подкаталогов (класс) |
|
(C++17) | представляет тип файла и права доступа (класс) |
|
(C++17) | информация о свободном и доступном пространстве в файловой системе (класс) |
|
(C++17) | тип файла (перечисление) |
|
(C++17) | обозначает права доступа к файлу (перечисление) |
|
(C++17) | задаёт семантику операций с правами доступа (перечисление) |
|
(C++17) | задаёт семантику операций копирования (перечисление) |
|
(C++17) | параметры итерации по содержимому каталога (перечисление) |
|
(C++17) | представляет значения времени файла (определение типа) |
Функции, не являющиеся членами |
|
Определено в заголовке <filesystem> |
|
Определено в пространстве имён std::filesystem |
|
|
(C++17) | составляет абсолютный путь (функция) |
|
(C++17) | составляет канонический путь (функция) |
|
(C++17) | составляет относительный путь (функция) |
|
(C++17) | копирует файлы или каталоги (функция) |
|
(C++17) | копирует содержимое файла (функция) |
|
(C++17) | копирует символическую ссылку (функция) |
|
(C++17)(C++17) | создаёт новый каталог (функция) |
|
(C++17) | создаёт жёсткую ссылку (функция) |
|
(C++17)(C++17) | создаёт символическую ссылку (функция) |
|
(C++17) | возвращает или задаёт текущий рабочий каталог (функция) |
|
(C++17) | проверяет, ссылается ли путь на существующий объект файловой системы (функция) |
|
(C++17) | проверяет, ссылаются ли два пути на один и тот же объект файловой системы (функция) |
|
(C++17) | возвращает размер файла (функция) |
|
(C++17) | возвращает количество жёстких ссылок на указанный файл (функция) |
|
(C++17) | получает или задаёт время последнего изменения данных (функция) |
|
(C++17) | изменяет права доступа к файлу (функция) |
|
(C++17) | получает цель символической ссылки (функция) |
|
(C++17)(C++17) | удаляет файл или пустой каталог удаляет файл или каталог со всем его содержимым рекурсивно (функция) |
|
(C++17) | перемещает файл или каталог либо переименовывает его (функция) |
|
(C++17) | изменяет размер обычного файла, усекая его или заполняя нулями (функция) |
|
(C++17) | определяет доступное свободное пространство в файловой системе (функция) |
|
(C++17)(C++17) | определяет атрибуты файла определяет атрибуты файла, проверяя цель символической ссылки (функция) |
|
(C++17) | возвращает каталог, подходящий для временных файлов (функция) |
Типы файлов |
|
|
(C++17) | проверяет, ссылается ли указанный путь на блочное устройство (функция) |
|
(C++17) | проверяет, ссылается ли указанный путь на символьное устройство (функция) |
|
(C++17) | проверяет, ссылается ли указанный путь на каталог (функция) |
|
(C++17) | проверяет, ссылается ли указанный путь на пустой файл или каталог (функция) |
|
(C++17) | проверяет, ссылается ли указанный путь на именованный канал (функция) |
|
(C++17) | проверяет, ссылается ли аргумент на файл другого типа (функция) |
|
(C++17) | проверяет, ссылается ли аргумент на обычный файл (функция) |
|
(C++17) | проверяет, ссылается ли аргумент на именованный сокет IPC (функция) |
|
(C++17) | проверяет, ссылается ли аргумент на символическую ссылку (функция) |
|
(C++17) | проверяет, известен ли статус файла (функция) |
Примечания
Для использования этой библиотеки могут потребоваться дополнительные параметры компилятора и компоновщика. Для реализации GNU до версии 9.1 требуется компоновка с -lstdc++fs, а для реализации LLVM до версии 9.0 — с -lc++fs.
| Макрос проверки поддержки функции | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_filesystem | 201703L | (C++17) | Библиотека файловой системы |
См. также
| Документация C++ для TS файловой системы |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/filesystem