std::filesystem::copy_file

Header: <filesystem>

1,2) The default, equivalent to (3,4) with copy_options::none used as options.

# Declarations

bool copy_file( const std::filesystem::path& from,
const std::filesystem::path& to );

(since C++17)

bool copy_file( const std::filesystem::path& from,
const std::filesystem::path& to,
std::error_code& ec );

(since C++17)

bool copy_file( const std::filesystem::path& from,
const std::filesystem::path& to,
std::filesystem::copy_options options );

(since C++17)

bool copy_file( const std::filesystem::path& from,
const std::filesystem::path& to,
std::filesystem::copy_options options,
std::error_code& ec );

(since C++17)

# Parameters

# Return value

true if the file was copied, false otherwise.

# Notes

The functions involve at most one direct or indirect call to filesystem::status(to) (used both to determine if the file exists, and, for filesystem::copy_options::update_existing option, its last write time).

Error is reported when filesystem::copy_file is used to copy a directory: use filesystem::copy for that.

filesystem::copy_file follows symlinks: use filesystem::copy_symlink or filesystem::copy with filesystem::copy_options::copy_symlinks for that.

# Example

#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");
}

# Defect reports

DRApplied toBehavior as publishedCorrect behavior
LWG 3014C++17error_code overload marked noexcept but can allocate memorynoexcept removed

# See also