<filesystem>
Функции
Эти бесплатные функции в заголовке <filesystem>
выполняют изменение и выполнение запросов к путям, файлам, символам, каталогам и томам. Дополнительные сведения и примеры кода см. в разделе Навигация по файловой системе (C++).
absolute
path absolute(const path& pval, const path& base = current_path());
Функция возвращает абсолютный путь, соответствующий pval
, относительно имени пути base
:
Если
pval.has_root_name() && pval.has_root_directory()
, функция возвращаетpval
.Если
pval.has_root_name() && !pval.has_root_directory()
, функция возвращаетpval.root_name()
/absolute(base).root_directory()
/absolute(base).relative_path()
/pval.relative_path()
.Если
!pval.has_root_name() && pval.has_root_directory()
, функция возвращаетabsolute(base).root_name()
/pval
.Если
!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)
перегрузку без базового параметра), а затем уменьшите ее до канонической формы в следующей последовательности шагов:
Каждый компонент
X
пути, для которогоis_symlink(X)
true
заменяетсяread_symlink(X)
.Каждый компонент
.
пути (точка — текущий каталог, установленный предыдущими компонентами пути), удаляется.Каждая пара компонентов
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, to
from.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
.
copy_symlink
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
параметра.
create_directory_symlink
void create_directory_symlink(const path& to, const path& link);
void create_directory_symlink(const path& to, const path& link, error_code& ec) noexcept;
Функция создает ссылку в виде ссылки на каталог.
create_hard_link
void create_hard_link(const path& to, const path& link);
void create_hard_link(const path& to, const path& link, error_code& ec) noexcept;
Функция создает ссылку как жесткую ссылку на каталог или файл.
create_symlink
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)
.
hard_link_count
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))
.
is_symlink
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;
Первые две функции возвращают время последнего изменения данных или pval
file_time_type(-1)
возникает ошибка. Последние две функции задают время последнего изменения pval
new_time
данных.
permissions
void permissions(const path& pval, perms mask);
void permissions(const path& pval, perms mask, error_code& ec) noexcept;
Функции задают разрешения для имени пути, выбранного pval
mask & 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);
read_symlink
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;
Функция обменивается содержимым слева и справа.
symlink_status
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);