Namespaces
Variants

std::experimental::filesystem:: copy_file

From cppreference.net
Определено в заголовке <experimental/filesystem>
bool copy_file ( const path & from, const path & to ) ;
bool copy_file ( const path & from, const path & to, error_code & ec ) ;
(1) (filesystem TS)
bool copy_file ( const path & from, const path & to, copy_options options ) ;
bool copy_file ( const path & from, const path & to, copy_options options, error_code & ec ) ;
(2) (filesystem TS)
1) Значение по умолчанию, эквивалентное (2) с использованием copy_options::none в качестве options .
2) Копирует один файл из from в to , используя параметры копирования, указанные в options . Поведение не определено, если присутствует более одной опции в любой из групп опций copy_options в options (даже в группах, не относящихся к copy_file ).
  • Если файл назначения не существует,
  • копирует содержимое и атрибуты файла, на который указывает from в файл, на который указывает to (символические ссылки отслеживаются).
  • В противном случае, если файл назначения уже существует:
  • Если to и from идентичны согласно определению equivalent(from, to) , сообщить об ошибке.
  • Иначе, если ни одна из опций управления copy_file не установлена в options , сообщить об ошибке.
  • Иначе, если copy_options::skip_existing установлена в options , ничего не делать.
  • Иначе, если copy_options::overwrite_existing установлена в options , скопировать содержимое и атрибуты файла, на который указывает from , в файл, на который указывает to .
  • Иначе, если copy_options::update_existing установлена в options , скопировать файл только если from новее чем to , согласно определению last_write_time() .

Непорождающие перегрузки возвращают false при возникновении ошибки.

Содержание

Параметры

from - путь к исходному файлу
to - путь к целевому файлу
ec - выходной параметр для сообщения об ошибках в непорождающей перегрузке

Возвращаемое значение

true если файл был скопирован, false в противном случае.

Исключения

The overload that does not take an error_code & parameter throws filesystem_error on underlying OS API errors, constructed with from as the first argument, to as the second argument, and the OS error code as the error code argument. std:: bad_alloc may be thrown if memory allocation fails. The overload taking an error_code & parameter sets it to the OS API error code if an OS API call fails, and executes ec. clear ( ) if no errors occur. This overload has
noexcept спецификация:
noexcept

Примечания

Функции включают не более одного прямого или косвенного вызова status(to) (используется как для определения существования файла, так и, для опции copy_options::update_existing , времени его последней записи).

Ошибка возникает, когда copy_file используется для копирования директории: используйте copy для этой цели.

copy_file следует по символьным ссылкам: используйте copy_symlink или copy с copy_options::copy_symlinks для этого.

Пример

#include <experimental/filesystem>
#include <fstream>
#include <iostream>
namespace fs = std::experimental::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"

Смотрите также

определяет семантику операций копирования
(перечисление)
копирует символическую ссылку
(функция)
копирует файлы или директории
(функция)