std::experimental::filesystem::copy_file
From cppreference.com
< cpp | experimental | fs
| ヘッダー <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) デフォルト。
copy_options::none を options として (2) を使用するのと同等です。2) options で指定されたコピーオプションを使用して、単一のファイルを from から to へコピーします。 options に含まれる copy_options のどのオプショングループにも複数のオプションが存在する場合(
copy_file に関連しないグループであっても)、未定義の動作となります。- 宛先ファイルが存在しない場合、
- from が解決するファイルの内容と属性を、to が解決するファイルにコピーします(シンボリックリンクはたどられます)。
- それ以外の場合、宛先ファイルが既に存在する場合
- equivalent(from, to) で決定されるように to と from が同じ場合、エラーを報告します。
- options で copy_file の制御オプションがどれも設定されていない場合、エラーを報告します。
- それ以外の場合、
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 | - | ターゲットファイルのパス |
| エラーコード | - | 例外を投げないオーバーロードでのエラー報告のための出力パラメータ |
[編集] 戻り値
ファイルがコピーされた場合は true、それ以外の場合は false。
[編集] 例外
error_code& パラメータを取らないオーバーロードは、基盤となる OS API エラーが発生した場合に filesystem_error をスローします。これは、最初の引数に from、2番目の引数に to、エラーコード引数に OS エラーコードを渡して構築されます。メモリ割り当てに失敗した場合は、std::bad_alloc がスローされる可能性があります。error_code& パラメータを取るオーバーロードは、OS API の呼び出しに失敗した場合にそれを OS API エラーコードに設定し、エラーが発生しなかった場合は ec.clear() を実行します。このオーバーロードはnoexcept 指定:
noexcept
[編集] 注記
これらの関数は、status(to) への直接または間接的な呼び出しを最大 1 回含みます(ファイルの存在確認と、copy_options::update_existing オプションの場合の最終書き込み時刻の確認に使用されます)。
ディレクトリをコピーするために `copy_file` を使用するとエラーが報告されます。それには copy を使用してください。
`copy_file` はシンボリックリンクをたどります。それには copy_symlink または copy_options::copy_symlinks を指定した copy を使用してください。
[編集] 例
このコードを実行
#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"); // now there are two files in 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'; // fail to copy directory 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"
[編集] 関連項目
| コピー操作のセマンティクスを指定する (列挙型) | |
| シンボリックリンクをコピーする (関数) | |
| ファイルまたはディレクトリをコピーする (関数) |