名前空間
変種
操作

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::noneoptions として (2) を使用するのと同等です。
2) options で指定されたコピーオプションを使用して、単一のファイルを from から to へコピーします。 options に含まれる copy_options のどのオプショングループにも複数のオプションが存在する場合(copy_file に関連しないグループであっても)、未定義の動作となります。
  • 宛先ファイルが存在しない場合、
  • from が解決するファイルの内容と属性を、to が解決するファイルにコピーします(シンボリックリンクはたどられます)。
  • それ以外の場合、宛先ファイルが既に存在する場合
  • equivalent(from, to) で決定されるように tofrom が同じ場合、エラーを報告します。
  • options で copy_file の制御オプションがどれも設定されていない場合、エラーを報告します。
  • それ以外の場合、copy_options::skip_existingoptions に設定されている場合、何も行いません。
  • それ以外の場合、copy_options::overwrite_existingoptions に設定されている場合、from が解決するファイルの内容と属性を、to が解決するファイルにコピーします。
  • それ以外の場合、copy_options::update_existingoptions に設定されている場合、fromto よりも新しい(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"

[編集] 関連項目

コピー操作のセマンティクスを指定する
(列挙型) [編集]
シンボリックリンクをコピーする
(関数) [編集]
ファイルまたはディレクトリをコピーする
(関数) [編集]
English 日本語 中文(简体) 中文(繁體)