<filesystem>Функции

Эти бесплатные функции в заголовке <filesystem> выполняют изменение и выполнение запросов к путям, файлам, символам, каталогам и томам. Дополнительные сведения и примеры кода см. в разделе Навигация по файловой системе (C++).

absolute

path absolute(const path& pval, const path& base = current_path());

Функция возвращает абсолютный путь, соответствующий pval, относительно имени пути base:

  1. Если pval.has_root_name() && pval.has_root_directory(), функция возвращает pval.

  2. Если pval.has_root_name() && !pval.has_root_directory(), функция возвращает pval.root_name() / absolute(base).root_directory() / absolute(base).relative_path() / pval.relative_path().

  3. Если !pval.has_root_name() && pval.has_root_directory(), функция возвращает absolute(base).root_name() / pval.

  4. Если !pval.has_root_name() && !pval.has_root_directory(), функция возвращает absolute(base) / pval.

begin

const directory_iterator& begin(const directory_iterator& iter) noexcept;
const recursive_directory_iterator&
    begin(const recursive_directory_iterator& iter) noexcept;

Обе функции возвращают значение iter.

canonical

path canonical(const path& pval, const path& base = current_path());
path canonical(const path& pval, error_code& ec);
path canonical(const path& pval, const path& base, error_code& ec);

Все функции образуют абсолютное имя pabs = absolute(pval, base) пути (или pabs = absolute(pval) перегрузку без базового параметра), а затем уменьшите ее до канонической формы в следующей последовательности шагов:

  1. Каждый компонент X пути, для которого is_symlink(X)true заменяется read_symlink(X).

  2. Каждый компонент . пути (точка — текущий каталог, установленный предыдущими компонентами пути), удаляется.

  3. Каждая пара компонентов X/.. пути (dot-dot является родительским каталогом, установленным предыдущими компонентами пути), удаляется.

Затем функция возвращается pabs.

copy

void copy(const path& from, const path& to);
void copy(const path& from, const path& to, error_code& ec) noexcept;
void copy(const path& from, const path& to, copy_options opts);
void copy(const path& from, const path& to, copy_options opts, error_code& ec) noexcept;

Все функции, возможно, копируют или связывают один или несколько файлов с одного или нескольких файлов под контролемopts, который принимается copy_options::none для перегрузки без opts параметров. Параметр opts должен содержать максимум одну из функций:

  • skip_existing, overwrite_existing или update_existing

  • copy_symlinks или skip_symlinks

  • directories_only, create_symlinks или create_hard_links

Функции сначала определяют значения file_status для следующих значенийf:t

  • If opts & (copy_options::create_symlinks | copy_options::skip_symlinks), вызывая symlink_status

  • в противном случае путем вызова status

  • в противном случае передается ошибка.

Если !exists(f) || equivalent(f, t) || is_other(f) || is_other(t) || is_directory(f)&& is_regular_file(t)они сообщают об ошибке (и ничего другого не делают).

В противном случае, если is_symlink(f) затем:

  • Если options & copy_options::skip_symlinks, то ничего не делать.

  • В противном случае, если !exists(t)&& options & copy_options::copy_symlinks, то copy_symlink(from, to, opts).

  • В противном случае сообщите об ошибке.

В противном случае, если is_regular_file(f), то:

  • Если opts & copy_options::directories_only, то ничего не делать.

  • В противном случае, если opts & copy_options::create_symlinks, то create_symlink(to, from).

  • В противном случае, если opts & copy_options::create_hard_links, то create_hard_link(to, from).

  • В противном случае, если is_directory(f), то / copy_file(from, tofrom.filename(), opts) .

  • В противном случае — copy_file(from, to, opts).

В противном случае, если is_directory(f) && (opts & copy_options::recursive || !opts), то:

if (!exists(t))
{  // copy directory contents recursively
    create_directory(to, from, ec);

    for (directory_iterator next(from), end; ec == error_code() && next != end; ++next)
    {
        copy(next->path(), to / next->path().filename(), opts, ec);
    }
}

В противном случае не выполнять никаких действий.

copy_file

bool copy_file(const path& from, const path& to);
bool copy_file(const path& from, const path& to, error_code& ec) noexcept;
bool copy_file(const path& from, const path& to, copy_options opts);
bool copy_file(const path& from, const path& to, copy_options opts, error_code& ec) noexcept;

Все функции, возможно, копируют файл изпод контрольopts, который принимается copy_options::none для перегрузки без opts параметров. opts должен содержать не более одного из skip_existing, overwrite_existingили update_existing.

Если exists(to) && !(opts & (copy_options::skip_existing | copy_options::overwrite_existing | copy_options::update_existing)), сообщите в виде ошибки, что файл уже существует.

В противном случае, если !exists(to) || opts & copy_options::overwrite_existing || opts & copy_options::update_existing&& last_write_time(to) < last_write_time(from) || !(opts & (copy_options::skip_existing | copy_options::overwrite_existing | copy_options:update_existing))попытка скопировать содержимое и атрибуты файла в файл. Передать как ошибку в случае сбоя попытки копирования.

Функции возвращаются true , если копия пытается и завершается успешно, в противном случае false.

void copy_symlink(const path& from, const path& to);
void copy_symlink(const path& from, const path& to, error_code& ec) noexcept;

Если is_directory(from)функция вызывается create_directory_symlink(from, to). В противном случае вызывается create_symlink(from, to).

create_directories

bool create_directories(const path& pval);
bool create_directories(const path& pval, error_code& ec) noexcept;

Для имени пути, например a\/b\/c, функция создает каталоги a и a\/b по мере необходимости, чтобы он смог создать каталог a\/b\/c по мере необходимости. Он возвращается true только в том случае, если он фактически создает каталог pval.

create_directory

bool create_directory(const path& pval);

bool create_directory(const path& pval, error_code& ec) noexcept;
bool create_directory(const path& pval, const path& attr);
bool create_directory(const path& pval, const path& attr, error_code& ec) noexcept;

Функция создает каталог pval при необходимости. Он возвращается true только в том случае, если он создает каталог pval, в этом случае копирует разрешения из существующего файла attrили используется perms::all для перегрузки без attr параметра.

void create_directory_symlink(const path& to, const path& link);
void create_directory_symlink(const path& to, const path& link, error_code& ec) noexcept;

Функция создает ссылку в виде ссылки на каталог.

void create_hard_link(const path& to,  const path& link);
void create_hard_link(const path& to, const path& link, error_code& ec) noexcept;

Функция создает ссылку как жесткую ссылку на каталог или файл.

void create_symlink(const path& to, const path& link);

void create_symlink(const path& to, const path& link, error_code& ec) noexcept;

Функция создает link в виде асимметричной связи с файлом.

current_path

path current_path();
path current_path(error_code& ec);
void current_path(const path& pval);
void current_path(const path& pval, error_code& ec) noexcept;

Функции, для которых нет параметра pval, возвращают путь к текущему каталогу. Остальные функции задают pval для текущего каталога.

end

directory_iterator& end(const directory_iterator& iter) noexcept;
recursive_directory_iterator& end(const recursive_directory_iterator& iter) noexcept;

Первая функция возвращается directory_iterator() , а вторая функция возвращает recursive_directory_iterator()

equivalent

bool equivalent(const path& left, const path& right);
bool equivalent(const path& left, const path& right, error_code& ec) noexcept;

Функции возвращаются true только в том случае, если слева и справа выберите одну и ту же сущность файловой системы.

exists

bool exists(file_status stat) noexcept;
bool exists(const path& pval);
bool exists(const path& pval, error_code& ec) noexcept;

Первая функция возвращает status_known && stat.type() != file_not_found. Возвращается exists(status(pval))второй и третий функции.

file_size

uintmax_t file_size(const path& pval);
uintmax_t file_size(const path& pval, error_code& ec) noexcept;

Функции возвращают размер в байтах выбранного файла pval, если exists(pval) && is_regular_file(pval) и размер файла можно определить. В противном случае они сообщают об ошибке и возвращаются uintmax_t(-1).

uintmax_t hard_link_count(const path& pval);
uintmax_t hard_link_count(const path& pval, error_code& ec) noexcept;

Функция возвращает количество жестких ссылок для pval,или -1, если возникает ошибка.

hash_value

size_t hash_value(const path& pval) noexcept;

Функция возвращает хэш-значение для pval.native().

is_block_file

bool is_block_file(file_status stat) noexcept;
bool is_block_file(const path& pval);
bool is_block_file(const path& pval, error_code& ec) noexcept;

Первая функция возвращает stat.type() == file_type::block. Остальные функции возвращаются is_block_file(status(pval)).

is_character_file

bool is_character_file(file_status stat) noexcept;
bool is_character_file(const path& pval);
bool is_character_file(const path& pval, error_code& ec) noexcept;

Первая функция возвращает stat.type() == file_type::character. Остальные функции возвращаются is_character_file(status(pval)).

is_directory

bool is_directory(file_status stat) noexcept;
bool is_directory(const path& pval);
bool is_directory(const path& pval, error_code& ec) noexcept;

Первая функция возвращает stat.type() == file_type::directory. Остальные функции возвращаются is_directory_file(status(pval)).

is_empty

bool is_empty(file_status stat) noexcept;
bool is_empty(const path& pval);
bool is_empty(const path& pval, error_code& ec) noexcept;

Если is_directory(pval), то функция возвращается directory_iterator(pval) == directory_iterator(); в противном случае она возвращается file_size(pval) == 0.

is_fifo

bool is_fifo(file_status stat) noexcept;
bool is_fifo(const path& pval);
bool is_fifo(const path& pval, error_code& ec) noexcept;

Первая функция возвращает stat.type() == file_type::fifo. Остальные функции возвращаются is_fifo(status(pval)).

is_other

bool is_other(file_status stat) noexcept;
bool is_other(const path& pval);
bool is_other(const path& pval, error_code& ec) noexcept;

Первая функция возвращает stat.type() == file_type::other. Остальные функции возвращаются is_other(status(pval)).

is_regular_file

bool is_regular_file(file_status stat) noexcept;
bool is_regular_file(const path& pval);
bool is_regular_file(const path& pval, error_code& ec) noexcept;

Первая функция возвращает stat.type() == file_type::regular. Остальные функции возвращаются is_regular_file(status(pval)).

is_socket

bool is_socket(file_status stat) noexcept;
bool is_socket(const path& pval);
bool is_socket(const path& pval, error_code& ec) noexcept;

Первая функция возвращает stat.type() == file_type::socket. Остальные функции возвращаются is_socket(status(pval)).

bool is_symlink(file_status stat) noexcept;
bool is_symlink(const path& pval);
bool is_symlink(const path& pval, error_code& ec) noexcept;

Первая функция возвращает stat.type() == file_type::symlink. Остальные функции возвращаются is_symlink(status(pval)).

last_write_time

file_time_type last_write_time(const path& pval);
file_time_type last_write_time(const path& pval, error_code& ec) noexcept;
void last_write_time(const path& pval, file_time_type new_time);
void last_write_time(const path& pval, file_time_type new_time, error_code& ec) noexcept;

Первые две функции возвращают время последнего изменения данных или pvalfile_time_type(-1) возникает ошибка. Последние две функции задают время последнего изменения pvalnew_timeданных.

permissions

void permissions(const path& pval, perms mask);
void permissions(const path& pval, perms mask, error_code& ec) noexcept;

Функции задают разрешения для имени пути, выбранного pvalmask & perms::mask под контролем perms & (perms::add_perms | perms::remove_perms). mask должен содержать не более одного из perms::add_perms и perms::remove_perms.

Если mask & perms::add_permsфункции задают разрешения status(pval).permissions() | mask & perms::mask. В противном случае, если mask & perms::remove_permsфункции задают разрешения status(pval).permissions() & ~(mask & perms::mask). В противном случае функции задают разрешения mask & perms::mask.

proximate

path proximate(const path& p, error_code& ec);
path proximate(const path& p, const path& base = current_path());
path proximate(const path& p, const path& base, error_code& ec);
path read_symlink(const path& pval);
path read_symlink(const path& pval, error_code& ec);

Функции сообщают об ошибке и возвращаются path() , если !is_symlink(pval). В противном случае функции возвращают объект типа path, содержащий символьную ссылку.

relative

path relative(const path& p, error_code& ec);
path relative(const path& p, const path& base = current_path());
path relative(const path& p, const path& base, error_code& ec);

remove

bool remove(const path& pval);
bool remove(const path& pval, error_code& ec) noexcept;

Функции возвращаются true только в том случае, если exists(symlink_status(pval)) файл успешно удален. Элемент symlink удаляется, а не файл, который он выбирает.

remove_all

uintmax_t remove_all(const path& pval);
uintmax_t remove_all(const path& pval, error_code& ec) noexcept;

Если pval является каталогом, функции рекурсивно удаляют все записи каталога, а затем саму запись. В противном случае вызов removeфункций. Они возвращают число всех успешно удаленных элементов.

rename

void rename(const path& from, const path& to);
void rename(const path& from, const path& to, error_code& ec) noexcept;

Функции переименовывается в. Символьная связь сама по себе переименована, а не файл, который он выбирает.

resize_file

void resize(const path& pval, uintmax_t size);
void resize(const path& pval, uintmax_t size, error_code& ec) noexcept;

Функции изменяют размер файла таким образом, чтобы file_size(pval) == size

space

space_info space(const path& pval);
space_info space(const path& pval, error_code& ec) noexcept;

Функция возвращает сведения о томе, выбранном pvalв структуре типа space_info. Структура содержит uintmax_t(-1) любое значение, которое невозможно определить.

status

file_status status(const path& pval);
file_status status(const path& pval, error_code& ec) noexcept;

Функции возвращают состояние имени пути, тип файла и разрешения, связанные с pval. Символьная связь не проверяется, но выбирается файл.

status_known

bool status_known(file_status stat) noexcept;

Функция возвращается stat.type() != file_type::none

swap

void swap(path& left, path& right) noexcept;

Функция обменивается содержимым слева и справа.

file_status symlink_status(const path& pval);
file_status symlink_status(const path& pval, error_code& ec) noexcept;

Функции возвращают состояние symlink имени пути, тип файла и разрешения, связанные с pval. Функции ведут себя так же, как status(pval) и тестируемая связь, а не файл, который он выбирает.

system_complete

path system_complete(const path& pval);
path system_complete(const path& pval, error_code& ec);

Функции возвращают абсолютный путь, который учитывает (при необходимости) текущий каталог, связанный с его корневым именем. (Для POSIX возвращается absolute(pval)функция).

temp_directory_path

path temp_directory_path();
path temp_directory_path(error_code& ec);

Функции возвращают путь к каталогу, подходящему для хранения временных файлов.

u8path

template <class Source>
path u8path(const Source& source);

template <class InIt>
path u8path(InIt first, InIt last);

Первая функция ведет себя так же, как path(source) и вторая функция, так же, как path(first, last) и выбранная исходная функция в каждом случае принимается как последовательность элементов char, закодированных как UTF-8, независимо от файловой системы.

weakly_canonical

path weakly_canonical(const path& p);
path weakly_canonical(const path& p, error_code& ec);