std::filesystem:: copy_file
|
Определено в заголовочном файле
<filesystem>
|
||
|
bool
copy_file
(
const
std::
filesystem
::
path
&
from,
const std:: filesystem :: path & to ) ; |
(1) | (начиная с C++17) |
|
bool
copy_file
(
const
std::
filesystem
::
path
&
from,
const
std::
filesystem
::
path
&
to,
|
(2) | (начиная с C++17) |
|
bool
copy_file
(
const
std::
filesystem
::
path
&
from,
const
std::
filesystem
::
path
&
to,
|
(3) | (начиная с C++17) |
|
bool
copy_file
(
const
std::
filesystem
::
path
&
from,
const
std::
filesystem
::
path
&
to,
|
(4) | (начиная с C++17) |
copy_options::none
в качестве
options
.
- Если !filesystem::is_regular_file(from) (либо потому, что исходный файл не существует, либо потому, что он не является обычным файлом), сообщает об ошибке.
- Иначе, если файл назначения не существует,
-
- копирует содержимое и атрибуты файла, на который указывает from , в файл, на который указывает to (символические ссылки разыменовываются).
- Иначе, если файл назначения уже существует,
-
- сообщает об ошибке, если верно любое из следующего:
-
- to и from являются одинаковыми, как определено filesystem::equivalent(from, to) ;
- to не является обычным файлом, как определено !filesystem::is_regular_file(to) ;
- ни одна из управляющих опций filesystem::copy_file не установлена в options .
-
Иначе, если в
options
установлен
copy_options::skip_existing, ничего не делает. -
Иначе, если в
options
установлен
copy_options::overwrite_existing, копирует содержимое и атрибуты файла, на который указывает from , в файл, на который указывает to . -
Иначе, если в
options
установлен
copy_options::update_existing, копирует файл только если from новее, чем to , как определено filesystem::last_write_time() .
Невозбуждающие перегрузки возвращают false при возникновении ошибки.
Содержание |
Параметры
| from | - | путь к исходному файлу |
| to | - | путь к целевому файлу |
| ec | - | выходной параметр для сообщения об ошибках в непорождающей перегрузке |
Возвращаемое значение
true если файл был скопирован, false в противном случае.
Исключения
Любая перегрузка, не помеченная
noexcept
, может выбрасывать
std::bad_alloc
при неудачном выделении памяти.
Примечания
Функции включают не более одного прямого или косвенного вызова
filesystem::status(to)
(используется как для определения существования файла, так и, для опции
filesystem::copy_options::update_existing
, времени его последней записи).
Ошибка возникает, когда filesystem::copy_file используется для копирования директории: используйте filesystem::copy для этой цели.
filesystem::copy_file
следует по символьным ссылкам: используйте
filesystem::copy_symlink
или
filesystem::copy
с
filesystem::copy_options::copy_symlinks
для этого.
Пример
#include <filesystem> #include <fstream> #include <iostream> namespace fs = std::filesystem; int main() { fs::create_directory("sandbox"); std::ofstream("sandbox/file1.txt").put('a'); fs::copy_file("sandbox/file1.txt", "sandbox/file2.txt"); // теперь в sandbox два файла: std::cout << "file1.txt holds: " << std::ifstream("sandbox/file1.txt").rdbuf() << '\n'; std::cout << "file2.txt holds: " << std::ifstream("sandbox/file2.txt").rdbuf() << '\n'; // неудачная попытка копирования директории fs::create_directory("sandbox/abc"); try { fs::copy_file("sandbox/abc", "sandbox/def"); } catch (fs::filesystem_error& e) { std::cout << "Could not copy sandbox/abc: " << e.what() << '\n'; } fs::remove_all("sandbox"); }
Возможный вывод:
file1.txt holds: a file2.txt holds: a Could not copy sandbox/abc: copy_file: Is a directory: "sandbox/abc", "sandbox/def"
Отчёты о дефектах
Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 3014 | C++17 |
error_code
overload marked noexcept but can allocate memory
|
noexcept removed |
Смотрите также
|
(C++17)
|
определяет семантику операций копирования
(enum) |
|
(C++17)
|
копирует символическую ссылку
(function) |
|
(C++17)
|
копирует файлы или директории
(function) |