es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

MinGW64 Rev5 MSYS2: la función filesystem::copy falla al copiar de un directorio a otro en la misma unidad de almacenamiento.

#include
#include
#include
using namespace std;
namespace fs = filesystem;

void testCopy(fs::path from, fs::path to)
{
try
{
fs::copy(from, to,
fs::copy_options::recursive | fs::copy_options::overwrite_existing);
}
catch(const std::exception& e)
{
wcout << e.what() << endl;
}
}

int main(int argc, char *args[])
{
auto path_drive_d_from = fs::path(“D:\directorio con algunos archivos”);
auto path_drive_d_to = fs::path(“D:\otro directorio vacío”);
auto path_drive_e_from = fs::path(“E:\directorio con algunos archivos”);
auto path_drive_e_to = fs::path(“E:\otro directorio vacío”);

testCopy(path_drive_d_from, path_drive_d_to);

// testCopy(path_drive_d_from, path_drive_e_to);

// testCopy(path_drive_e_from, path_drive_e_from);

// testCopy(path_drive_e_from, path_drive_d_to);
return 0;
}

He probado 4 casos y solo obtuve errores al copiar directorios en el mismo disco.
Estos son los mensajes de error que obtuve.
filesystem error: no se puede copiar: El archivo ya existe [D:\MisProyectos\miProyecto] [D:\MisProyectos\prueba\descomprimir]

y

filesystem error: no se puede copiar: El archivo ya existe [E:\prueba] [E:\prueba2]

La copia de un directorio a otro en un disco diferente fue exitosa. Creo que esto es muy extraño y no lo entiendo.
Estoy usando c++17 de gcc 11.2.0 de MSYS2.
Por favor, avíseme cómo puedo copiar un directorio correctamente. Gracias.
Um, cada prueba de copia se realizó de forma independiente, desde un directorio con archivos a un directorio vacío existente.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en GCC, copia y sistemas de archivos, entiendo que el mensaje de error “Error de sistema de archivos: no se puede copiar: el archivo ya existe” indica que ya existe un archivo con el mismo nombre en el directorio de destino. Esto se puede resolver eliminando el archivo existente o eligiendo un directorio de destino diferente con un nombre diferente.

    En el código proporcionado, la función “testCopy” se utiliza para copiar archivos del directorio de origen al directorio de destino. Utiliza la función “copy” del espacio de nombres “filesystem” y proporciona las opciones “recursive” y “overwrite_existing” para copiar todos los archivos y sobrescribir cualquier archivo existente con el mismo nombre.

    Para copiar un directorio correctamente en otro directorio, puedes seguir los siguientes pasos:

    1. Asegúrate de que el directorio de origen y el directorio de destino existan.
    2. Llama a la función “testCopy” con la ruta del directorio de origen y la ruta del directorio de destino, como se muestra en el código proporcionado.
    3. Si recibes un mensaje de error que indica que ya existe un archivo con el mismo nombre, elimina el archivo existente o elige un directorio de destino diferente con un nombre diferente.

    En conclusión, para copiar un directorio correctamente en otro directorio, debes asegurarte de que el directorio de origen y el directorio de destino existan y luego llamar a la función “testCopy” con la ruta del directorio de origen y la ruta del directorio de destino. Si recibes un mensaje de error que indica que ya existe un archivo con el mismo nombre, elimina el archivo existente o elige un directorio de destino diferente con un nombre diferente.

Comments are closed.