Библиотека файловой системы (с C++17)
Библиотека файловой системы предоставляет средства для выполнения операций с файловыми системами и их компонентами, такими как пути, обычные файлы и каталоги.
Библиотека файловой системы первоначально была разработана как boost.filesystem, была опубликована как техническое описание ISO/IEC TS 18822:2015, и, наконец, интегрирована в ISO C++ начиная с C++17. Реализация Boost в настоящее время доступна на большем количестве компиляторов и платформ, чем библиотека C++17.
Средства библиотеки файловой системы могут быть недоступны, если иерархическая файловая система не доступна для реализации, или если она не предоставляет необходимые возможности. Некоторые функции могут быть недоступны, если они не поддерживаются базовой файловой системой (например, файловая система FAT не поддерживает символические ссылки и запрещает несколько жёстких ссылок). В таких случаях должны быть сообщения об ошибках.
Поведение является неопределённым, если вызовы функций в этой библиотеке вызывают конфликт доступа к файловой системе, то есть, когда несколько потоков, процессов или компьютеров чередуют доступ и изменение одного и того же объекта в файловой системе.
Определения для всей библиотеки
- файл: объект файловой системы, хранящий данные, к которому можно записывать и читать, или и то, и другое. Файлы имеют имена и атрибуты, одним из которых является тип файла:
- каталог: файл, который выступает в качестве контейнера для записей каталога, которые идентифицируют другие файлы (некоторые из которых могут быть другими, вложенными каталогами). При обсуждении конкретного файла, каталогом, в котором он появляется как запись, является его родительский каталог. Родительский каталог может быть представлен относительным именем пути
"..". - обычный файл: запись каталога, которая связывает имя с существующим файлом (т.е. жёсткой ссылкой). Если поддерживается несколько жёстких ссылок, файл удаляется после удаления последней жёсткой ссылки на него.
- символическая ссылка: запись каталога, которая связывает имя с путем, который может или не может существовать.
- другие специальные типы файлов: блочный, символьный, FIFO, сокет.
- имя файла: строка символов, которая называет файл. Разрешённые символы, регистрозависимость, максимальная длина и запрещённые имена определяются реализацией. Имена
"."(точка) и".."(точка-точка) имеют специальное значение на уровне библиотеки. - путь: последовательность элементов, которые идентифицируют файл. Он начинается с необязательного имени корня (например,
"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) | представляет значения времени файла (typedef) |
Функции без указания на класс |
|
Определено в заголовочном файле <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 до версии 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/w/cpp/filesystem