Skip to content

Latest commit

 

History

History
102 lines (76 loc) · 4.32 KB

copy_file.md

File metadata and controls

102 lines (76 loc) · 4.32 KB

copy_file

  • filesystem[meta header]
  • std::filesystem[meta namespace]
  • function[meta id-type]
  • cpp17[meta cpp]
namespace std::filesystem {
  bool copy_file(const path& from, const path& to);                       // (1)
  bool copy_file(const path& from, const path& to, std::error_code& ec);  // (2)

  bool copy_file(const path& from, const path& to, copy_options options); // (3)
  bool copy_file(const path& from, const path& to, copy_options options,
                 std::error_code& ec);                                    // (4)
}
  • path[link path.md]
  • copy_options[link copy_options.md]

概要

ファイルをコピーする。

要件

  • optionsは、各グループのオプションが最大ひとつまで設定されていること

効果

戻り値

ファイルのコピーが行われたらtrue、そうでなければfalseが返る。

(2)と(4)でエラーが発生した場合もfalseが返る。

計算量

直接的もしくは間接的なstatus(to)の呼び出しは、最大で一回

例外

  • (1), (3) : ファイルシステムがエラーを報告する場合がある。エラーが発生した場合は、std::filesystem::filesystem_error例外を送出する
  • (2), (4) : OSがファイルコピーの直接のAPIを定義していない場合、この関数の実装として動的なバッファを確保する可能性がある。その際、メモリ確保で例外が発生する可能性がある

#include <cassert>
#include <filesystem>
#include <fstream>

namespace fs = std::filesystem;

int main()
{
  std::ofstream{"regular.txt"};

  // ファイル"regular.txt"を、"copy.txt"にコピーする
  fs::copy_file("regular.txt", "copy.txt");

  assert(fs::exists("regular.txt"));
  assert(fs::exists("copy.txt"));

  // 同じパスではなく、シンボリックリンク/ハードリンクでもないので、等価ではない
  assert(!fs::equivalent("regular.txt", "copy.txt"));
}
  • fs::copy_file[color ff0000]
  • fs::exists[link exists.md]
  • fs::equivalent[link equivalent.md]

出力

バージョン

言語

  • C++17

処理系

参照