c++ qt file-copying

c++ - Copie el archivo incluso cuando exista el destino(en Qt)



file-copying (4)

En la documentación de QFile::copy dice

Si ya existe un archivo con el nombre newName, copy () devuelve false (es decir, QFile no lo sobrescribirá).

Pero necesito copiar un archivo incluso si el destino existe. Cualquier solución disponible en Qt para eso?

Eliminar el archivo es la solución obvia pero invita a una condición de carrera ...


El reintento más simple que se me ocurre es:

while !QFile::copy("/home/user/src.txt", "/home/user/dst.txt") { QFile::remove("/home/user/dst.txt"); }

Pero esto todavía no es una solución real, ya que algunas de las condiciones de carrera son cosas que no bloquean la eliminación.

Actualmente estoy buscando una forma de manejar la escritura de una página web como salida, pero sin la actualización automática que se haya detectado entre la eliminación y la copia.


La solución obvia es, por supuesto, eliminar el archivo si existe, antes de hacer la copia.

Sin embargo, tenga en cuenta que al hacerlo, se abre el código a una condición de carrera clásica, ya que en un sistema operativo multitarea típico, un proceso diferente podría volver a crear el archivo entre las llamadas de eliminación y copia de las aplicaciones. Eso causaría que la copia aún fallara, por lo que debe estar preparado (y tal vez volver a intentar la eliminación, pero eso podría introducir una necesidad de conteo para que no gaste siempre intentando, y así sucesivamente).


Simplemente llame a remove () antes de copiar ();


if (QFile::exists("/home/user/dst.txt")) { QFile::remove("/home/user/dst.txt"); } QFile::copy("/home/user/src.txt", "/home/user/dst.txt");