Namespaces
Variants

std::filesystem:: copy_options

From ru.cppreference.net
Определено в заголовочном файле <filesystem>
enum class copy_options {

none = /* unspecified */ ,
skip_existing = /* unspecified */ ,
overwrite_existing = /* unspecified */ ,
update_existing = /* unspecified */ ,
recursive = /* unspecified */ ,
copy_symlinks = /* unspecified */ ,
skip_symlinks = /* unspecified */ ,
directories_only = /* unspecified */ ,
create_symlinks = /* unspecified */ ,
create_hard_links = /* unspecified */

} ;
(начиная с C++17)

Этот тип представляет доступные опции, которые управляют поведением функции copy() и функции copy_file() .

copy_options удовлетворяет требованиям BitmaskType (что означает, что побитовые операторы operator & , operator | , operator ^ , operator~ , operator & = , operator | = и operator ^ = определены для этого типа). none представляет пустую битовую маску; каждый другой перечислитель представляет отдельный элемент битовой маски.

Константы-члены

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

Константа-член Значение
Опции управления copy_file() при существовании файла
none Сообщить об ошибке (поведение по умолчанию).
skip_existing Сохранить существующий файл без сообщения об ошибке.
overwrite_existing Заменить существующий файл.
update_existing Заменить существующий файл только если он старше копируемого файла.
Опции управления эффектами copy() на поддиректории
none Пропустить поддиректории (поведение по умолчанию).
recursive Рекурсивно копировать поддиректории и их содержимое.
Опции управления эффектами copy() на символические ссылки
none Следовать симлинкам (поведение по умолчанию).
copy_symlinks Копировать симлинки как симлинки, а не как файлы, на которые они указывают.
skip_symlinks Игнорировать симлинки.
Опции управления типом копирования copy()
none Копировать содержимое файла (поведение по умолчанию).
directories_only Копировать структуру директорий, но не копировать файлы, не являющиеся директориями.
create_symlinks Вместо создания копий файлов создавать симлинки, указывающие на оригиналы. Примечание: исходный путь должен быть абсолютным, если путь назначения не находится в текущей директории.
create_hard_links Вместо создания копий файлов создавать жесткие ссылки, указывающие на те же файлы, что и оригиналы.

Пример

#include <cstdlib>
#include <filesystem>
#include <fstream>
#include <iostream>
namespace fs = std::filesystem;
int main()
{
    fs::create_directories("sandbox/dir/subdir");
    std::ofstream("sandbox/file1.txt").put('a');
    fs::copy("sandbox/file1.txt", "sandbox/file2.txt"); // копировать файл
    fs::copy("sandbox/dir", "sandbox/dir2"); // копировать директорию (не рекурсивно)
    const auto copyOptions = fs::copy_options::update_existing
                           | fs::copy_options::recursive
                           | fs::copy_options::directories_only
                           ;
    fs::copy("sandbox", "sandbox_copy", copyOptions); 
    static_cast<void>(std::system("tree"));
    fs::remove_all("sandbox");
    fs::remove_all("sandbox_copy");
}

Возможный вывод:

.
├── sandbox
│   ├── dir
│   │   └── subdir
│   ├── dir2
│   ├── file1.txt
│   └── file2.txt
└── sandbox_copy
    ├── dir
    │   └── subdir
    └── dir2
8 directories, 2 files

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

(C++17)
копирует файлы или директории
(функция)
(C++17)
копирует содержимое файла
(функция)