std::experimental::filesystem:: copy
From cppreference.net
<
cpp
|
experimental
|
fs
|
Definido en el encabezado
<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) |
Copia archivos y directorios, con una variedad de opciones:
1)
El valor predeterminado, equivalente a
(2)
con
copy_options::none
utilizado como
options
.
2)
Copia el archivo o directorio
from
al archivo o directorio
to
, usando las opciones de copia indicadas por
options
. El comportamiento es indefinido si hay más de una opción en cualquiera de los
grupos de opciones copy_options
presentes en
options
(incluso en el grupo
copy_file
, que no es relevante para
copy
).
El comportamiento es el siguiente:
-
Primero, antes de hacer cualquier otra cosa, obtiene el tipo y permisos de
from
mediante no más de una llamada a
status
(o, si
copy_options::skip_symlinksocopy_options::create_symlinksestán presentes en options , mediante una llamada asymlink_status). - Si es necesario, obtiene el estado de to de la misma manera, mediante no más de una llamada a status o symlink_status.
- Si from no existe, reporta un error.
- Si from y to son el mismo archivo según lo determinado por equivalent() , reporta un error.
- Si from o to no es un archivo regular, un directorio o un enlace simbólico, según lo determinado por is_other , reporta un error.
- Si from es un directorio, pero to es un archivo regular, reporta un error.
- Si from es un enlace simbólico, entonces
-
-
Si
copy_options::skip_symlinkestá presente en options , no hace nada. -
De lo contrario, si
to
no existe y
copy_options::copy_symlinksestá presente en options , entonces se comporta como si copy_symlink ( from, to ) . - De lo contrario, reporta un error.
-
Si
- De lo contrario, si from es un archivo regular, entonces
-
-
Si
copy_options::directories_onlyestá presente en options , no hace nada. -
De lo contrario, si
copy_options::create_symlinksestá presente en options , crea un enlace simbólico a to . Nota: from debe ser una ruta absoluta a menos que to esté en el directorio actual. -
De lo contrario, si
copy_options::create_hard_linksestá presente en options , crea un enlace físico a to . - De lo contrario, si to es un directorio, entonces se comporta como si copy_file ( from, to / from. filename ( ) , options ) (crea una copia de from como un archivo en el directorio to ).
- De lo contrario, se comporta como si copy_file ( from, to, options ) (copia el archivo).
-
Si
-
De lo contrario, si
from
es un directorio y ya sea que
options
tenga
copy_options::recursiveo seacopy_options::none.
-
- Si to no existe, primero ejecuta create_directory ( to, from ) (crea el nuevo directorio con una copia de los atributos del directorio antiguo).
-
Luego, ya sea que
to
ya existiera o acabe de ser creado, itera sobre los archivos contenidos en
from
como si fuera mediante
for
(
const
directory_entry
&
x
:
directory_iterator
(
from
)
)
y para cada entrada de directorio, llama recursivamente a
copy
(
x.
path
(
)
, to
/
x.
path
(
)
.
filename
(
)
, options
|
unspecified
)
, donde
unspecified
es un bit especial que no tiene otro efecto cuando se establece en
options
(el único propósito de establecer este bit es prevenir la copia recursiva de subdirectorios si
options
es
copy_options::none).
- De lo contrario, no hace nada.
Contenidos |
Parámetros
| from | - | ruta al archivo fuente, directorio o enlace simbólico |
| to | - | ruta al archivo destino, directorio o enlace simbólico |
| ec | - | parámetro de salida para reporte de errores en la sobrecarga que no lanza excepciones |
Valor de retorno
(ninguno)
Excepciones
The overload that does not take an error_code & parameter throws filesystem_error on underlying OS API errors, constructed with from as the first argument, a 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 an 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
especificación:
noexcept
Notas
El comportamiento predeterminado al copiar directorios es la copia no recursiva: los archivos se copian, pero no los subdirectorios:
// Dado // /dir1 contiene /dir1/file1, /dir1/file2, /dir1/dir2 // y /dir1/dir2 contiene /dir1/dir2/file3 // Después std::experimental::filesystem::copy("/dir1", "/dir3"); // /dir3 es creado (con los atributos de /dir1) // /dir1/file1 es copiado a /dir3/file1 // /dir1/file2 es copiado a /dir3/file2
Mientras que con
copy_options::recursive
, los subdirectorios también se copian, con su contenido, recursivamente.
// ...pero después std::experimental::filesystem::copy("/dir1", "/dir3", copy_options::recursive); // /dir3 es creado (con los atributos de /dir1) // /dir1/file1 es copiado a /dir3/file1 // /dir1/file2 es copiado a /dir3/file2 // /dir3/dir2 es creado (con los atributos de /dir1/dir2) // /dir1/dir2/file3 es copiado a /dir3/dir2/file3
Ejemplo
Ejecutar este código
#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"); // copiar archivo fs::copy("sandbox/dir", "sandbox/dir2"); // copiar directorio (no recursivo) // sandbox contiene 2 archivos y 2 directorios, uno de los cuales tiene un subdirectorio // sandbox/file1.txt // sandbox/file2.txt // sandbox/dir2 // sandbox/dir // sandbox/dir/subdir fs::copy("sandbox", "sandbox/copy", fs::copy_options::recursive); // sandbox/copy contiene copias de los archivos y subdirectorios anteriores fs::remove_all("sandbox"); }
Véase también
|
especifica la semántica de las operaciones de copia
(enum) |
|
|
copia un enlace simbólico
(function) |
|
|
copia contenidos de archivo
(function) |