yes without not empty asking and all c++ windows boost boost-filesystem

c++ - not - mv overwrite without asking



cómo realizar boost:: filesystem copy_file con sobrescribir (4)

La función de API de Windows CopyFile tiene un argumento BOOL bFailIfExists que le permite controlar si desea sobrescribir el archivo de destino si existe.

La función boost::filesystem copy_file no tiene ese argumento, y fallará si el archivo de destino existe. ¿Existe alguna forma elegante de utilizar la función boost copy_file y sobrescribir el archivo de destino? ¿O es mejor simplemente usar la API de Windows? Mi plataforma objetivo actual es Windows, pero prefiero usar STL y potenciar, donde sea posible, para mantener mi plataforma de código independiente.

Gracias.


¿Existe alguna forma elegante de utilizar la función boost copy_file y sobrescribir el archivo de destino?

Aparentemente no hay una API directa para hacer esto.

¿O es mejor simplemente usar la API de Windows? Mi plataforma objetivo actual es Windows, pero prefiero usar STL y potenciar, donde sea posible, para mantener mi plataforma de código independiente.

De la documentación:

Una propuesta, N1975, para incluir Boost.Filesystem en el Informe técnico 2 ha sido aceptada por el Comité de estándares de C ++. La biblioteca Boost.Filesystem se mantendrá alineada con la propuesta del sistema de archivos TR2 a medida que avanza en el proceso TR2. Sin embargo, tenga en cuenta que los espacios de nombres y la granularidad del encabezado difieren entre Boost.Filesystem y la propuesta TR2.

Lo que sugiere fuertemente que seguir con boost::filesystem es una buena idea.


¡Cuidado con boost :: copy_file con copy_option :: overwrite_if_exists! Si el archivo de destino existe y es más pequeño que el origen, la función solo sobrescribirá los primeros bytes de tamaño (from_file) en el archivo de destino.

Al menos para mí, esto era una advertencia ya que suponía que copy_option :: overwrite_if_exists afecta a los archivos y no al contenido


Hay un tercer argumento enum para copy_file, boost :: filesystem :: copy_option :: overwrite_if_exists

copy_file(source_path,destination_path,copy_option::overwrite_if_exists);


Pruebe si el archivo de destino existe primero y, en caso afirmativo, elimínelo:

if (exists (to_fp)) remove (to_fp); copy_file (from_fp, to_fp);

O si le preocupa que el archivo aparezca entre la prueba y la copia, puede escribir en un archivo temporal y luego cambiarle el nombre al archivo de destino.