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 options);
void copy(const path& from, const path& to, copy_options options,
error_code& ec) noexcept;
Requires: [fs.enum.copy.opts]Устанавливается не более одного элемента из каждой группы опций ( ) options.
Effects: Перед первым применением f и t:
Если
(options & copy_options::create_symlinks) != copy_options::none || (options & copy_options::skip_symlinks) != copy_options::none
тогда auto f = symlink_status(from) и при необходимости auto t = symlink_status(to).
В противном случае, если
(options & copy_options::copy_symlinks) != copy_options::none
тогда auto f = symlink_status(from) и при необходимости auto t = status(to).
В противном случае auto f = status(from) и при необходимости auto t = status(to).
Эффекты тогда следующие:
Если f.type() или t.type() является типом файла, определяемым реализацией ([fs.enum.file_type]), то эффекты определяются реализацией.
В противном случае сообщается об ошибке, как указано в [fs.err.report] if:
!exists(f), или
equivalent(from, to), или
is_other(f) || is_other(t), или
is_directory(f) && is_regular_file(t).
В противном случае, если is_symlink(f), то:
Если (options & copy_options::skip_symlinks) != copy_options::none потом вернемся.
В противном случае, если
!exists(t) && (options & copy_options::copy_symlinks) != copy_options::none
тогда copy_symlink(from, to).
В противном случае сообщите об ошибке, как указано в [fs.err.report].
В противном случае, если is_regular_file(f), то:
Если (options & copy_options::directories_only) != copy_options::none, то вернись.
В противном случае, если (options & copy_options::create_symlinks) != copy_options::none, то создайте символическую ссылку на исходный файл.
В противном случае, если (options & copy_options::create_hard_links) != copy_options::none, то создайте жесткую ссылку на исходный файл.
Иначе если is_directory(t), то copy_file(from, to/from.filename(), options).
В противном случае copy_file(from, to, options).
В противном случае, если
is_directory(f) && ((options & copy_options::recursive) != copy_options::none || options == copy_options::none)
тогда:
Если !exists(t), то create_directory(to, from).
Затем перейдите по файлам from, как если бы
for (const directory_entry& x : directory_iterator(from))
copy(x.path(), to/x.path().filename(), options | copy_options::unspecified)
В противном случае, для подписи с аргументом ec, ec.clear().
В остальном никаких эффектов.
Throws: Как указано в [fs.err.report].
Remarks: Для подписи с аргументом ecлюбые библиотечные функции, вызываемые реализацией, должны иметь error_code аргумент, если это применимо.
[ Example: Учитывая эту структуру каталогов:
/dir1 file1 file2 dir2 file3
Вызов copy("/dir1", "/dir3") приведет к:
/dir1 file1 file2 dir2 file3 /dir3 file1 file2
В качестве альтернативы вызов copy("/dir1", "/dir3", copy_options::recursive) может привести к:
/dir1 file1 file2 dir2 file3 /dir3 file1 file2 dir2 file3
— end example ]