| Classes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Functions | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| File types | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in header <filesystem> | ||
bool copy_file(conststd::filesystem::path& from, conststd::filesystem::path& to); | (1) | (since C++17) |
bool copy_file(conststd::filesystem::path& from, conststd::filesystem::path& to, | (2) | (since C++17) |
bool copy_file(conststd::filesystem::path& from, conststd::filesystem::path& to, | (3) | (since C++17) |
bool copy_file(conststd::filesystem::path& from, conststd::filesystem::path& to, | (4) | (since C++17) |
copy_options::none used asoptions.copy_options::skip_existing is set inoptions, do nothing.copy_options::overwrite_existing is set inoptions, copy the contents and the attributes of the file to whichfrom resolves to the file to whichto resolves.copy_options::update_existing is set inoptions, only copy the file iffrom is newer thanto, as defined byfilesystem::last_write_time().The non-throwing overloads returnfalse if an error occurs.
Contents |
| from | - | path to the source file |
| to | - | path to the target file |
| ec | - | out-parameter for error reporting in the non-throwing overload |
true if the file was copied,false otherwise.
Any overload not markednoexcept may throwstd::bad_alloc if memory allocation fails.
The functions involve at most one direct or indirect call tofilesystem::status(to) (used both to determine if the file exists, and, forfilesystem::copy_options::update_existing option, its last write time).
Error is reported whenfilesystem::copy_file is used to copy a directory: usefilesystem::copy for that.
filesystem::copy_file follows symlinks: usefilesystem::copy_symlink orfilesystem::copy withfilesystem::copy_options::copy_symlinks for that.
#include <filesystem>#include <fstream>#include <iostream>namespace fs= std::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");}
Possible output:
file1.txt holds: afile2.txt holds: aCould not copy sandbox/abc: copy_file: Is a directory: "sandbox/abc", "sandbox/def"
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 3014 | C++17 | error_code overload marked noexcept but can allocate memory | noexcept removed |
(C++17) | specifies semantics of copy operations (enum)[edit] |
(C++17) | copies a symbolic link (function)[edit] |
(C++17) | copies files or directories (function)[edit] |