在线文档教程
C++
文件系统 | Filesystem

std::filesystem::copy

std::filesystem::copy

Defined in header
void copy( const std::filesystem::path& from, const std::filesystem::path& to void copy( const std::filesystem::path& from, const std::filesystem::path& to, std::error_code& ec (1)(since C++17)
void copy( const std::filesystem::path& from, const std::filesystem::path& to, std::filesystem::copy_options options void copy( const std::filesystem::path& from, const std::filesystem::path& to, std::filesystem::copy_options options, std::error_code& ec (2)(since C++17)

Copies files and directories, with a variety of options.

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

2) Copies the file or directory from to file or directory to, using the copy options indicated by options. The behavior is undefined if there is more than one option in any of the copy_options option group present in options (even in the copy_file group, which is not relevant to copy)

The behavior is as follows:

  • First, before doing anything else, obtains type and permissions of from by no more than a single call to

Parameters

from-path to the source file, directory, or symlink
to-path to the target file, directory, or symlink
ec-out-parameter for error reporting in the non-throwing overload

Return value

(none).

Exceptions

The overload that does not take a std::error_code& parameter throws filesystem_error on underlying OS API errors, constructed with from as the first argument, to as the second argument, and the OS error code as the error code argument. std::bad_alloc may be thrown if memory allocation fails. The overload taking a std::error_code& parameter sets it to the OS API error code if an OS API call fails, and executes ec.clear() if no errors occur. This overload has

noexcept specification:

noexcept

Notes

The default behavior when copying directories is the non-recursive copy: the files are copied, but not the subdirectories:

// Given // /dir1 contains /dir1/file1, /dir1/file2, /dir1/dir2 // and /dir1/dir2 contains /dir1/dir2/file3 // After std::filesystem::copy("/dir1", "/dir3" // /dir3 is created (with the attributes of /dir1) // /dir1/file1 is copied to /dir3/file1 // /dir1/file2 is copied to /dir3/file2

While with copy_options::recursive, the subdirectories are also copied, with their content, recursively.

// ...but after std::filesystem::copy("/dir1", "/dir3", std::filesystem::copy_options::recursive // /dir3 is created (with the attributes of /dir1) // /dir1/file1 is copied to /dir3/file1 // /dir1/file2 is copied to /dir3/file2 // /dir3/dir2 is created (with the attributes of /dir1/dir2) // /dir1/dir2/file3 is copied to /dir3/dir2/file3

Example

#include <iostream> #include <fstream> #include <filesystem> namespace fs = std::filesystem; int main() { fs::create_directories("sandbox/dir/subdir" std::ofstream("sandbox/file1.txt").put('a' fs::copy("sandbox/file1.txt", "sandbox/file2.txt" // copy file fs::copy("sandbox/dir", "sandbox/dir2" // copy directory (non-recursive) // sandbox holds 2 files and 2 directories, one of which has a subdirectory // sandbox/file1.txt // sandbox/file2.txt // sandbox/dir2 // sandbox/dir // sandbox/dir/subdir fs::copy("sandbox", "sandbox/copy", fs::copy_options::recursive // sandbox/copy holds copies of the above files and subdirectories fs::remove_all("sandbox" }

See also

copy_options (C++17)specifies semantics of copy operations (enum)
copy_symlink (C++17)copies a symbolic link (function)
copy_file (C++17)copies file contents (function)

© cppreference.com

Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.

http://en.cppreference.com/w/cpp/filesystem/copy