Espacios de nombres
Variantes
Acciones

std::filesystem::copy_file

De cppreference.com
 
 
 
Definido en el archivo de encabezado <filesystem>
bool copy_file( const std::filesystem::path& from,

                const std::filesystem::path& to );
bool copy_file( const std::filesystem::path& from,
                const std::filesystem::path& to,

                std::error_code& ec );
(1) (desde C++17)
bool copy_file( const std::filesystem::path& from,

                const std::filesystem::path& to,
                std::filesystem::copy_options options );
bool copy_file( const std::filesystem::path& from,
                const std::filesystem::path& to,
                std::filesystem::copy_options options,

                std::error_code& ec );
(2) (desde C++17)
1) Por defecto. Es equivalente a (2) con copy_options::none utilizada como options.
2) Copia un solo archivo de 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 resuelve to (se siguen los enlaces simbólicos).
  • De lo contrario, si el archivo destino ya existe:
  • Se informa de un error si y solo si cualquiera de lo siguiente es verdadero:
  • De lo contrario, si copy_options::skip_existing está establecida en options, no hace nada.
  • De lo contrario, si copy_options::overwrite_existing está establecida en options, copia el contenido y los atributos del archivo al cual se resuelve from al archivo al que se resuelve to.
  • De lo contrario, si copy_options::update_existing está establecida en options, solo copia el archivo si from es más reciente que to, 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

Especifica la semántica de las operaciones de copia.
(enum) [editar]
Copia un enlace simbólico.
(función) [editar]
(C++17)
Copia archivos o directorios.
(función) [editar]