Spec-Zone.ru › C++

std::filesystem::copy_options

Определено в заголовке <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"); // copy file
    fs::copy("sandbox/dir", "sandbox/dir2"); // copy directory (non-recursive)
    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

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/filesystem/copy_options

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API