Che cosa significa "scambio nomi di file"? Stai parlando del file system o solo delle variabili nel tuo programma?
Se il tuo programma è C++, e hai due nomi di file nelle stringhe, e vuoi scambiarli, usa std :: swap.Questo cambia solo le variabili nel programma:
std::string filenameA("somefilename");
std::string filenameB("othername");
std::swap(filenameA, filenameB);
std::cout << filenameA << std::endl; // prints "othername"
Se si dispone di due file sul disco, e si desidera che i nomi di scambiare contenuti con l'altro, allora no, non c'è modo per facilmente che, se vuoi preservare i collegamenti fisici. Se si desidera eseguire un "salvataggio sicuro", la chiamata di sistema unix rename() comprimerà il file di destinazione con il file di origine in un'operazione atomica (come atomico che può essere supportato dal file system sottostante). Così, faresti sicuro salvare in questo modo:
std::string savename(filename);
savename += ".tmp";
... write data to savename ...
if (::rename(savename.c_str(), filename.c_str()) < 0) {
throw std::exception("oops!");
}
Se davvero, davvero bisogno di scambiare i file su disco (ad esempio, per tenere una copia di backup), quindi immettere hard-linking. Nota: l'hard-linking non è supportato su tutti i file system (in particolare alcune condivisioni di file SMB), quindi sarà necessario implementare un backup se necessario. È necessario un file temporaneo nome, ma non un qualsiasi archivio dati temporaneo. Mentre è possibile implementarlo manualmente con link() e unlink() (ricorda: i file possono avere più collegamenti rigidi in UNIX), è più facile usare solo rename(). Tuttavia, non puoi fare uno scambio interamente atomico.
assumendo vecchiofile è "filname.dat" e newfile è "filename.dat.bak" otterrete questo:
::link(oldfile, tempfile);
::rename(newfile, oldfile);
::rename(tempfile, newfile);
Se si crash dopo il link, avrete i nuovi dati in newfile e i vecchi dati in oldfile e tempfile. Se si crash dopo la prima rinomina, avrete i nuovi dati in vecchiofile, ei vecchi dati in file temporaneo (ma non newfile!)
Cosa vuoi dire scambiando i nomi dei file? Rinominare il file "A" come "B" e v.v.? – Kimvais
Non esiste una funzione incorporata per JUST scambiare i nomi dei file! come hai detto puoi farlo con uno script di shell e una variabile temporanea –
Hai un linguaggio di implementazione specifico o hai bisogno di un comando (shell)? Che tipo di partizione viene utilizzata? (È necessario prendere in considerazione la possibilità di lavorare su NFS?) Cosa c'è che non va nell'approvazione delle variabili temporanee? –