Defined in header <filesystem> | ||
enumclass copy_options{ none=/* unspecified */, | (since C++17) | |
This type represents available options that control the behavior of thecopy() andcopy_file() function.
copy_options satisfies the requirements ofBitmaskType (which means the bitwise operatorsoperator&,operator|,operator^,operator~,operator&=,operator|=, andoperator^= are defined for this type).none represents the empty bitmask; every other enumerator represents a distinct bitmask element.
At most one copy option in each of the following options groups may be present, otherwise the behavior of the copy functions is undefined.
| Member constant | Meaning |
|---|---|
| options controllingcopy_file() when the file already exists | |
none | Report an error (default behavior). |
skip_existing | Keep the existing file, without reporting an error. |
overwrite_existing | Replace the existing file. |
update_existing | Replace the existing file only if it is older than the file being copied. |
| options controlling the effects ofcopy() on subdirectories | |
none | Skip subdirectories (default behavior). |
recursive | Recursively copy subdirectories and their content. |
| options controlling the effects ofcopy() on symbolic links | |
none | Follow symlinks (default behavior). |
copy_symlinks | Copy symlinks as symlinks, not as the files they point to. |
skip_symlinks | Ignore symlinks. |
| options controlling the kind of copyingcopy() does | |
none | Copy file content (default behavior). |
directories_only | Copy the directory structure, but do not copy any non-directory files. |
create_symlinks | Instead of creating copies of files, create symlinks pointing to the originals. Note: the source path must be an absolute path unless the destination path is in the current directory. |
create_hard_links | Instead of creating copies of files, create hardlinks that resolve to the same files as the originals. |
#include <cstdlib>#include <filesystem>#include <fstream>#include <iostream>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)constauto copyOptions= fs::copy_options::update_existing| fs::copy_options::recursive| fs::copy_options::directories_only; fs::copy("sandbox","sandbox_copy", copyOptions);static_cast<void>(std::system("tree")); fs::remove_all("sandbox"); fs::remove_all("sandbox_copy");}
Possible output:
.├── sandbox│ ├── dir│ │ └── subdir│ ├── dir2│ ├── file1.txt│ └── file2.txt└── sandbox_copy ├── dir │ └── subdir └── dir2 8 directories, 2 files
(C++17) | copies files or directories (function)[edit] |
(C++17) | copies file contents (function)[edit] |