Spec-Zone.ru › C++

Библиотека файловой системы (начиная с C++17)

Библиотека файловой системы предоставляет средства для выполнения операций с файловыми системами и их компонентами, такими как пути, обычные файлы и каталоги.

Изначально библиотека файловой системы была разработана как boost.filesystem, опубликована как техническая спецификация ISO/IEC TS 18822:2015, а затем вошла в стандарт ISO C++ начиная с C++17. Реализация Boost в настоящее время доступна для большего числа компиляторов и платформ, чем библиотека C++17.

Средства библиотеки файловой системы могут быть недоступны, если реализация не имеет доступа к иерархической файловой системе или если та не предоставляет необходимые возможности. Некоторые функции могут быть недоступны, если они не поддерживаются нижележащей файловой системой (например, файловая система FAT не поддерживает символические ссылки и запрещает несколько жёстких ссылок). В таких случаях необходимо сообщать об ошибках.

Поведение является неопределённым, если вызовы функций этой библиотеки приводят к гонке файловой системы, то есть когда несколько потоков, процессов или компьютеров чередуют доступ к одному и тому же объекту файловой системы и его изменение.

Определения, общие для библиотеки

  • файл: объект файловой системы, содержащий данные, в который можно записывать данные, из которого можно считывать данные или выполнять обе операции. У файлов есть имена, атрибуты, один из которых — тип файла:
    • каталог: файл, который служит контейнером для записей каталога, идентифицирующих другие файлы (некоторые из них могут быть другими, вложенными каталогами). Если речь идёт о конкретном файле, каталог, в котором он представлен в виде записи, называется его родительским каталогом. Родительский каталог может быть представлен относительным путём "..".
    • обычный файл: запись каталога, связывающая имя с существующим файлом (то есть жёсткая ссылка). Если поддерживается несколько жёстких ссылок, файл удаляется после удаления последней жёсткой ссылки на него.
    • символическая ссылка: запись каталога, связывающая имя с путём, который может существовать или не существовать.
    • другие специальные типы файлов: блочное устройство, символьное устройство, именованный канал, сокет.
  • имя файла: строка символов, задающая имя файла. Допустимые символы, чувствительность к регистру, максимальная длина и недопустимые имена определяются реализацией. Имена "." (точка) и ".." (две точки) имеют особое значение на уровне библиотеки.
  • путь: последовательность элементов, идентифицирующая файл. Он начинается с необязательного имени корня (например, "C:" или "//server" в Windows), за которым следует необязательный корневой каталог (например, "/" в Unix), а затем последовательность из нуля или более имён файлов (все, кроме последнего, должны быть каталогами или ссылками на каталоги). Собственный формат (например, используемые в качестве разделителей символы) и кодировка символьного представления пути (имени пути) определяются реализацией; эта библиотека предоставляет переносимое представление путей.
    • абсолютный путь: путь, однозначно определяющий расположение файла.
    • канонический путь: абсолютный путь, не содержащий символических ссылок, элементов "." или "..".
    • относительный путь: путь, определяющий расположение файла относительно некоторого места в файловой системе. Специальные имена путей "." (точка, «текущий каталог») и ".." (две точки, «родительский каталог») являются относительными путями.

Классы

Определено в заголовке <filesystem>
Определено в пространстве имён std::filesystem
path
(C++17)
представляет путь
(класс)
filesystem_error
(C++17)
исключение, выбрасываемое при ошибках файловой системы
(класс)
directory_entry
(C++17)
запись каталога
(класс)
directory_iterator
(C++17)
итератор по содержимому каталога
(класс)
recursive_directory_iterator
(C++17)
итератор по содержимому каталога и его подкаталогов
(класс)
file_status
(C++17)
представляет тип файла и права доступа
(класс)
space_info
(C++17)
информация о свободном и доступном пространстве в файловой системе
(класс)
file_type
(C++17)
тип файла
(перечисление)
perms
(C++17)
обозначает права доступа к файлу
(перечисление)
perm_options
(C++17)
задаёт семантику операций с правами доступа
(перечисление)
copy_options
(C++17)
задаёт семантику операций копирования
(перечисление)
directory_options
(C++17)
параметры итерации по содержимому каталога
(перечисление)
file_time_type
(C++17)
представляет значения времени файла
(определение типа)

Функции, не являющиеся членами

Определено в заголовке <filesystem>
Определено в пространстве имён std::filesystem
absolute
(C++17)
составляет абсолютный путь
(функция)
canonicalweakly_canonical
(C++17)
составляет канонический путь
(функция)
relativeproximate
(C++17)
составляет относительный путь
(функция)
copy
(C++17)
копирует файлы или каталоги
(функция)
copy_file
(C++17)
копирует содержимое файла
(функция)
copy_symlink
(C++17)
копирует символическую ссылку
(функция)
create_directorycreate_directories
(C++17)(C++17)
создаёт новый каталог
(функция)
create_hard_link
(C++17)
создаёт жёсткую ссылку
(функция)
create_symlinkcreate_directory_symlink
(C++17)(C++17)
создаёт символическую ссылку
(функция)
current_path
(C++17)
возвращает или задаёт текущий рабочий каталог
(функция)
exists
(C++17)
проверяет, ссылается ли путь на существующий объект файловой системы
(функция)
equivalent
(C++17)
проверяет, ссылаются ли два пути на один и тот же объект файловой системы
(функция)
file_size
(C++17)
возвращает размер файла
(функция)
hard_link_count
(C++17)
возвращает количество жёстких ссылок на указанный файл
(функция)
last_write_time
(C++17)
получает или задаёт время последнего изменения данных
(функция)
permissions
(C++17)
изменяет права доступа к файлу
(функция)
read_symlink
(C++17)
получает цель символической ссылки
(функция)
removeremove_all
(C++17)(C++17)
удаляет файл или пустой каталог
удаляет файл или каталог со всем его содержимым рекурсивно
(функция)
rename
(C++17)
перемещает файл или каталог либо переименовывает его
(функция)
resize_file
(C++17)
изменяет размер обычного файла, усекая его или заполняя нулями
(функция)
space
(C++17)
определяет доступное свободное пространство в файловой системе
(функция)
statussymlink_status
(C++17)(C++17)
определяет атрибуты файла
определяет атрибуты файла, проверяя цель символической ссылки
(функция)
temp_directory_path
(C++17)
возвращает каталог, подходящий для временных файлов
(функция)
Типы файлов
is_block_file
(C++17)
проверяет, ссылается ли указанный путь на блочное устройство
(функция)
is_character_file
(C++17)
проверяет, ссылается ли указанный путь на символьное устройство
(функция)
is_directory
(C++17)
проверяет, ссылается ли указанный путь на каталог
(функция)
is_empty
(C++17)
проверяет, ссылается ли указанный путь на пустой файл или каталог
(функция)
is_fifo
(C++17)
проверяет, ссылается ли указанный путь на именованный канал
(функция)
is_other
(C++17)
проверяет, ссылается ли аргумент на файл другого типа
(функция)
is_regular_file
(C++17)
проверяет, ссылается ли аргумент на обычный файл
(функция)
is_socket
(C++17)
проверяет, ссылается ли аргумент на именованный сокет IPC
(функция)
is_symlink
(C++17)
проверяет, ссылается ли аргумент на символическую ссылку
(функция)
status_known
(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API