¿Qué significa "nombres de archivos intercambiados"? ¿Estás hablando del sistema de archivos, o solo variables en tu programa?
Si su programa es C++, y tiene dos nombres de archivo en cadenas, y desea intercambiarlos, use std :: swap.Esto sólo cambia las variables en el programa:
std::string filenameA("somefilename");
std::string filenameB("othername");
std::swap(filenameA, filenameB);
std::cout << filenameA << std::endl; // prints "othername"
Si tiene dos archivos en el disco, y desea que los nombres para intercambiar contenidos entre sí, entonces no, no hay manera de facilidad para que, si quiere preservar los enlaces duros. Si solo desea realizar un "guardado seguro", la llamada al sistema Unix rename() bloqueará el archivo de destino con el archivo fuente en una operación atómica (tan atómico como pueda ser compatible con el sistema de archivos subyacente). Por lo tanto, és segura de guardado de esta manera:
std::string savename(filename);
savename += ".tmp";
... write data to savename ...
if (::rename(savename.c_str(), filename.c_str()) < 0) {
throw std::exception("oops!");
}
Si realmente, realmente necesita para intercambiar los archivos en el disco (por ejemplo, para mantener una copia de seguridad), a continuación, introduzca difíciles de vinculación. Nota: los enlaces duros no se admiten en todos los sistemas de archivos (específicamente algunos recursos compartidos de archivos SMB), por lo que deberá implementar alguna copia de seguridad si es necesario. Necesitará un archivo temporal nombre, pero no cualquier almacén de datos temporal. Si bien puede implementarlo manualmente con link() y desvincular() (recuerde: los archivos pueden tener múltiples enlaces duros en UNIX), es más fácil simplemente usar rename(). Sin embargo, no se puede hacer un intercambio completamente atómico.
asumiendo viejoarchivo es "filname.dat" y nuevofichero es "filename.dat.bak" le va a conseguir esto:
::link(oldfile, tempfile);
::rename(newfile, oldfile);
::rename(tempfile, newfile);
Si usted se estrella después del enlace, tendrá los nuevos datos en newfile y los datos antiguos en oldfile y tempfile. Si usted se estrella después del primer cambio de nombre, tendrá los nuevos datos en viejoarchivo, y los datos antiguos en archivo temporal (pero no NewFile!)
¿Qué quiere decir mediante el canje de los nombres de archivo? ¿Renombrar el archivo "A" como "B" y v.v.? – Kimvais
¡No existe una función incorporada para SOLO intercambiar nombres de archivos! como dijiste, puedes hacerlo mediante un script de shell y una variable de temperatura –
. ¿Tienes un lenguaje de implementación específico o necesitas un comando (shell)? ¿Qué tipo de partición se está utilizando? (¿Se debe tener en cuenta el trabajo a través de NFS?) ¿Qué hay de malo con el aproarch de la variable temp? –