Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::experimental::filesystem::copy

      From cppreference.com
      <cpp‎ |experimental‎ |fs
       
       
       
      Filesystem library
      Classes
      Functions
      File types
       
      Defined in header<experimental/filesystem>
      void copy(const path& from,const path& to);
      void copy(const path& from,const path& to, error_code& ec);
      (1)(filesystem TS)
      void copy(const path& from,const path& to, copy_options options);
      void copy(const path& from,const path& to, copy_options options, error_code& ec);
      (2)(filesystem TS)

      Copies files and directories, with a variety of options:

      1) The default, equivalent to(2) withcopy_options::none used asoptions.
      2) Copies the file or directoryfrom to file or directoryto, using the copy options indicated byoptions. The behavior is undefined if there is more than one option in any of thecopy_options option group present inoptions (even in thecopy_file group, which is not relevant tocopy).

      The behavior is as follows:

      • First, before doing anything else, obtains type and permissions offrom by no more than single call tostatus (or, ifcopy_options::skip_symlinks orcopy_options::create_symlinks are present inoptions, by a call tosymlink_status).
      • If necessary, obtains the status ofto the same way, by no more than a single status or symlink_status call.
      • Iffrom does not exist, reports an error.
      • Iffrom andto are the same file as determined byequivalent(), reports an error.
      • If eitherfrom orto is not a regular file, a directory, or a symlink, as determined byis_other, reports an error.
      • Iffrom is a directory, butto is a regular file, reports an error.
      • Iffrom is a symbolic link, then
      • Ifcopy_options::skip_symlink is present inoptions, does nothing.
      • Otherwise, ifto does not exist andcopy_options::copy_symlinks is present inoptions, then behaves as ifcopy_symlink(from, to).
      • Otherwise, reports an error.
      • Otherwise, iffrom is a regular file, then
      • Ifcopy_options::directories_only is present inoptions, does nothing.
      • Otherwise, ifcopy_options::create_symlinks is present inoptions, creates a symlink toto. Note:from must be an absolute path unlessto is in the current directory.
      • Otherwise, ifcopy_options::create_hard_links is present inoptions, creates a hard link toto.
      • Otherwise, ifto is a directory, then behaves as ifcopy_file(from, to/from.filename(), options) (creates a copy offrom as a file in the directoryto).
      • Otherwise, behaves as ifcopy_file(from, to, options) (copies the file).
      • Otherwise, iffrom is a directory and eitheroptions hascopy_options::recursive or iscopy_options::none.
      • Ifto does not exist, first executescreate_directory(to, from) (creates the new directory with a copy of the old directory's attributes).
      • Then, whetherto already existed or was just created, iterates over the files contained infrom as if byfor(const directory_entry& x: directory_iterator(from)) and for each directory entry, recursively callscopy(x.path(), to/x.path().filename(), options| unspecified), whereunspecified is a special bit that has no other effect when set inoptions (the sole purpose of setting this bit is to prevent recursive copying subdirectories ifoptions iscopy_options::none).
      • Otherwise does nothing.

      Contents

      [edit]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

      [edit]Return value

      (none)

      [edit]Exceptions

      The overload that does not take anerror_code& parameter throwsfilesystem_error on underlying OS API errors, constructed withfrom 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 anerror_code& parameter sets it to the OS API error code if an OS API call fails, and executesec.clear() if no errors occur. This overload has
      noexcept specification:  
      noexcept
        

      [edit]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// Afterstd::experimental::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 withcopy_options::recursive, the subdirectories are also copied, with their content, recursively.

      // ...but afterstd::experimental::filesystem::copy("/dir1","/dir3", 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

      [edit]Example

      Run this code
      #include <experimental/filesystem>#include <fstream>#include <iostream>namespace fs= std::experimental::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");}

      [edit]See also

      specifies semantics of copy operations
      (enum)[edit]
      copies a symbolic link
      (function)[edit]
      copies file contents
      (function)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/experimental/fs/copy&oldid=154821"

      [8]ページ先頭

      ©2009-2025 Movatter.jp