std::filesystem::rename
Definido en el archivo de encabezado <filesystem>
|
||
void rename(const std::filesystem::path& old_p, const std::filesystem::path& new_p); |
(desde C++17) | |
Mueve o renombra el objeto de sistema de archivos identificado por old_p
a new_p
como si fuera por la función rename
de POSIX:
- Si
old_p
es un archivo que no es un directorio, entoncesnew_p
debe ser uno de:
- el mismo archivo que
old_p
o un enlace físico a él: no se hace nada en este caso. - un archivo existente que no es un directorio : primero se borra
new_p
, luego, sin permitir que otros procesos observen quenew_p
se ha borrado, el nombre de ruta de accesonew_p
se enlaza al archivo yold_p
se desenlaza del archivo. Se requieren los permisos de escritura tanto para el directorio que contiene aold_p
como para el directorio que contiene anew_p
. - un archivo no existente a un directorio existente: El nombre de ruta de acceso
new_p
se enlaza al archivo yold_p
se desenlaza del archivo. Se requieren los permisos de escritura tanto para el directorio que contiene aold_p
como para el directorio que contiene anew_p
.
- el mismo archivo que
- Si
old_p
es un directorio, entoncesnew_p
debe ser uno de:
- el mismo directorio que
old_p
o un enlace físico a él: no se hace nada en este caso. - un directorio existente:
new_p
se borra si está vacío en los sistemas POSIX, pero esto puede ser un error en otros sistemas. Si no es un error, entonces primero se borranew_p
, luego, sin permitir que otros procesos observen quenew_p
se ha borrado, el nombre de ruta de accesonew_p
se enlaza al directorio yold_p
se desenlaza del directorio. Se requieren los permisos de escritura tanto para el directorio que contiene aold_p
como para el directorio que contiene anew_p
. - un directorio no existente que no termina con el separador de directorios, y cuyo directorio padre existe: El nombre de ruta de acceso
new_p
se enlaza al directorio yold_p
se desenlaza del directorio. Se requieren los permisos de escritura tanto para el directorio que contiene aold_p
como para el directorio que contiene anew_p
.
- el mismo directorio que
- No se siguen los enlaces simbólicos: si
old_p
es un enlace simbólico, este se renombra, pero no su objetivo. Sinew_p
es un enlace simbólico existente, este se borra, pero no su objetivo.
La función de renombre de archivos fracasa si:
-
new_p
termina con punto o con punto-punto; -
new_p
denomina a un directorio no existente que termina con el separador de directorios; -
old_p
es un directorio que es un ancestro denew_p
.
Contenido |
[editar] Parámetros
old_p | - | La ruta de acceso a mover o renombrar. |
new_p | - | La ruta de acceso objetivo de la operación de movimiento o renombre. |
ec | - | El parámetro de salida para informe de errores en la sobrecarga que no lanza excepciones. |
[editar] Valor de retorno
(Ninguno)
[editar] Excepciones
La sobrecarga que no toma un parámetro std::error_code& lanza filesystem::filesystem_error en los errores de la API del sistema operativo subyacente, construido con old_p
como el primer argumento de la ruta de acceso, new_p
como el segundo argumento de la ruta de acceso, y el código de error del sistema operativo como el argumento del código de error. La sobrecarga que toma un parámetro std::error_code& lo establece en el código de error de la API del sistema operativo si una llamada a la API del sistema operativo falla, y ejecuta ec.clear() si no ocurren errores. Cualquier sobrecarga que no está marcada con noexcept puede lanzar std::bad_alloc si la asignación de memoria falla.
[editar] Ejemplo
#include <iostream> #include <fstream> #include <filesystem> namespace fs = std::filesystem; int main() { fs::path p = fs::current_path() / "entorno_aislado"; fs::create_directories(p/"de"); std::ofstream(p/"de/archivo1.txt").put('a'); fs::create_directory(p/"a"); // fs::rename(p/"de/archivo1.txt", p/"a/"); // ERROR: "a" es un directorio fs::rename(p/"de/archivo1.txt", p/"a/archivo2.txt"); // de acuerdo // fs::rename(p/"de", p/"a"); // ERROR: "a" no está vacío fs::rename(p/"de", p/"a/subdir"); // de acuerdo fs::remove_all(p); }
[editar] Véase también
cambia el nombre de un archivo Original: renames a file The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (función) | |
(C++17)(C++17) |
Remueve un archivo o directorio vacío. Remueve un archivo o directorio y todo su contenido recursivamente. (función) |