名前空間
変種
操作

std::filesystem::copy_options

提供: cppreference.com
 
 
 
ヘッダ <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_optionsBitmaskType の要件を満たします (つまり、この型に対するビット単��の演算子 operator&, operator|, operator^, operator~, operator&=, operator|=, operator^= が定義されます)。

[編集] メンバ定数

それぞれのグループ内で高々1つのコピーオプションだけが選択でき、さもなければ copy 関数の動作は未定義です。

メンバ定数 意味
ファイルがすでに存在するとき 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 <iostream>
#include <fstream>
#include <filesystem>
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)
ファイルまたはディレクトリをコピーします
(関数) [edit]
(C++17)
ファイルの内容をコピーします
(関数) [edit]