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 directo
ry from
to
file or directo
ry 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.