Namespaces
Variants

std::filesystem:: copy_file

From cppreference.net
Definido en el 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,

std:: error_code & ec ) ;
(2) (desde C++17)
(3) (desde C++17)
(4) (desde C++17)
1,2) El valor predeterminado, equivalente a (3,4) con copy_options::none utilizado como options .
3,4) Copia un único archivo desde from hacia to , utilizando las opciones de copia indicadas por options . El comportamiento es indefinido si hay más de una opción en cualquiera de los copy_options grupos de opciones presentes en 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), reporta un error.
  • De lo contrario, si el archivo destino no existe,
  • copia los contenidos y atributos del archivo al que from resuelve hacia el archivo al que to resuelve (los enlaces simbólicos son seguidos).
  • De lo contrario, si el archivo destino ya existe,
  • reporta un error si cualquiera de los siguientes es verdadero:
  • De lo contrario, si copy_options::skip_existing está establecido en options , no hace nada.
  • De lo contrario, si copy_options::overwrite_existing está establecido en options , copia los contenidos y atributos del archivo al que from resuelve hacia el archivo al que to resuelve.
  • De lo contrario, si copy_options::update_existing está establecido en options , solo copia el archivo si from es más reciente que to , según lo definido por filesystem::last_write_time() .

Las sobrecargas que no lanzan excepciones retornan false si ocurre un error.

Contenidos

Parámetros

from - ruta al archivo de origen
to - ruta al archivo de destino
ec - parámetro de salida para reporte de errores en la sobrecarga no lanzadora

Valor de retorno

true si el archivo fue copiado, false en caso contrario.

Excepciones

Cualquier sobrecarga no marcada como noexcept puede lanzar std::bad_alloc si la asignación de memoria falla.

1,3) Lanza std::filesystem::filesystem_error en errores de la API del sistema operativo subyacente, construido con from como primer argumento de ruta, to como segundo argumento de ruta, y el código de error del sistema operativo como argumento de código de error.
2,4) Establece un parámetro std:: error_code & al código de error de la API del sistema operativo si una llamada a la API del SO falla, y ejecuta ec. clear ( ) si no ocurren errores.

Notas

Las funciones involucran como máximo 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 hora de última escritura).

Se reporta un error cuando filesystem::copy_file se utiliza para copiar un directorio: use filesystem::copy para eso.

filesystem::copy_file sigue enlaces simbólicos: use filesystem::copy_symlink o filesystem::copy con filesystem::copy_options::copy_symlinks para eso.

Ejemplo

#include <filesystem>
#include <fstream>
#include <iostream>
namespace fs = std::filesystem;
int main()
{
    fs::create_directory("sandbox");
    std::ofstream("sandbox/file1.txt").put('a');
    fs::copy_file("sandbox/file1.txt", "sandbox/file2.txt");
    // ahora hay dos archivos en sandbox:
    std::cout << "file1.txt holds: "
              << std::ifstream("sandbox/file1.txt").rdbuf() << '\n';
    std::cout << "file2.txt holds: "
              << std::ifstream("sandbox/file2.txt").rdbuf() << '\n';
    // fallo al copiar directorio
    fs::create_directory("sandbox/abc");
    try
    {
        fs::copy_file("sandbox/abc", "sandbox/def");
    }
    catch (fs::filesystem_error& e)
    {
        std::cout << "Could not copy sandbox/abc: " << e.what() << '\n';
    }
    fs::remove_all("sandbox");
}

Salida posible:

file1.txt holds: a
file2.txt holds: a
Could not copy sandbox/abc: copy_file: Is a directory: "sandbox/abc", "sandbox/def"

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 3014 C++17 error_code sobrecarga marcada noexcept pero puede asignar memoria noexcept eliminado

Véase también

especifica la semántica de las operaciones de copia
(enum)
copia un enlace simbólico
(function)
(C++17)
copia archivos o directorios
(function)