std::filesystem::copy_file
Definido en el archivo de encabezado <filesystem>
|
||
bool copy_file( const std::filesystem::path& from, const std::filesystem::path& to ); |
(1) | (desde C++17) |
bool copy_file( const std::filesystem::path& from, const std::filesystem::path& to, |
(2) | (desde C++17) |
copy_options::none
utilizada como options
.from
a to
, utilizando las opciones de copia indicadas por options
. El comportamiento no está definido si hay más de una opción en alguna de las opciones de copia copy_options presentes en el grupo de opciones options
(incluso en los grupos no relevantes para filesystem::copy_file).
- Si !filesystem::is_regular_file(from) (ya sea porque el archivo fuente no existe o porque no es un archivo regular), se informa de un error.
- De lo contrario, si el archivo destino no existe:
- Copia el contenido y los atributos del archivo al cual se resuelve
from
al archivo al que se resuelveto
(se siguen los enlaces simbólicos).
- Copia el contenido y los atributos del archivo al cual se resuelve
- De lo contrario, si el archivo destino ya existe:
- Se informa de un error si y solo si cualquiera de lo siguiente es verdadero:
-
to
yfrom
son el mismo archivo, como se determina por filesystem::equivalent(from, to); -
to
no es un archivo regular, como se determina por !filesystem::is_regular_file(to); - ninguna de las opciones de control filesystem::copy_file están establecidas en
options
.
-
- De lo contrario, si
copy_options::skip_existing
está establecida enoptions
, no hace nada. - De lo contrario, si
copy_options::overwrite_existing
está establecida enoptions
, copia el contenido y los atributos del archivo al cual se resuelvefrom
al archivo al que se resuelveto
. - De lo contrario, si
copy_options::update_existing
está establecida enoptions
, solo copia el archivo sifrom
es más reciente queto
, según se define por filesystem::last_write_time().
Las sobrecargas que no lanzan excepciones devuelven false si ocurre un error.
Contenido |
[editar] Parámetros
from | - | La ruta de acceso al archivo fuente. |
to | - | La ruta de acceso al archivo destino. |
ec | - | El parámetro de salida para informe de errores en la sobrecarga que no lanza excepciones. |
[editar] Valor de retorno
true si se copió el archivo, false de lo contrario.
[editar] Excepciones
La sobrecarga que no toma un parámetro std::error_code& lanza filesystem::filesystem_error en los errores de la API del sistema operativo subyacente, construido con from
como el primer argumento de la ruta de acceso, to
como el segundo argumento de la ruta de acceso, y el código de error del sistema operativo como el argumento del código de error. La sobrecarga que toma un parámetro std::error_code& lo establece en el código de error de la API del sistema operativo si una llamada a la API del sistema operativo falla, y ejecuta ec.clear() si no ocurren errores. Cualquier sobrecarga que no está marcada con noexcept puede lanzar std::bad_alloc si la asignación de memoria falla.
[editar] Notas
Las funciones involucran a lo sumo una llamada directa o indirecta a filesystem::status(to) (utilizada tanto para determinar si el archivo existe, como para la opción filesystem::copy_options::update_existing
, su último tiempo de escritura).
Se informa de un error cuando filesystem::copy_file se utiliza para copiar un directorio: utiliza filesystem::copy para eso.
filesystem::copy_file sigue los enlaces simbólicos: utiliza filesystem::copy_symlink o filesystem::copy con filesystem::copy_options::copy_symlinks
para eso.
[editar] Ejemplos
#include <fstream> #include <iostream> #include <filesystem> namespace fs = std::filesystem; int main() { fs::create_directory("entorno_aislado"); std::ofstream("entorno_aislado/archivo1.txt").put('a'); fs::copy_file("entorno_aislado/archivo1.txt", "entorno_aislado/archivo2.txt"); // ahora hay dos archivos en entorno_aislado: std::cout << "archivo1.txt alberga : " << std::ifstream("entorno_aislado/archivo1.txt").rdbuf() << '\n'; std::cout << "archivo2.txt alberga : " << std::ifstream("entorno_aislado/archivo2.txt").rdbuf() << '\n'; // fracasa al copiar el directorio fs::create_directory("entorno_aislado/abc"); try { fs::copy_file("entorno_aislado/abc", "entorno_aislado/def"); } catch(fs::filesystem_error& e) { std::cout << "No se pudo copiar entorno_aislado/abc: " << e.what() << '\n'; } fs::remove_all("entorno_aislado"); }
Posible salida:
archivo1.txt alberga : a archivo2.txt alberga : a No se pudo copiar entorno_aislado/abc: copy_file: Es un directorio: "entorno_aislado/abc", "entorno_aislado/def"
[editar] Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
---|---|---|---|
LWG 3014 | C++17 | La sobrecarga con error_code está marcada con noexcept pero puede asignar memoria.
|
Se eliminó noexcept. |
[editar] Véase también
(C++17) |
Especifica la semántica de las operaciones de copia. (enum) |
(C++17) |
Copia un enlace simbólico. (función) |
(C++17) |
Copia archivos o directorios. (función) |