Namespaces
Variants

std::filesystem:: copy_options

From 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 は空のビットマスクを表し、他のすべての列挙子は個別のビットマスク要素を表す。

メンバー定数

以下のオプショングループの各グループにおいて、最大で1つのコピーオプションが存在する場合があります。それ以外の場合、コピー関数の動作は未定義となります。

メンバー定数 意味
ファイルが既に存在する場合の 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)
ファイルの内容をコピーする
(関数)