std::filesystem:: rename
|
Definido en el encabezado
<filesystem>
|
||
|
void
rename
(
const
std::
filesystem
::
path
&
old_p,
const std:: filesystem :: path & new_p ) ; |
(1) | (desde C++17) |
|
void
rename
(
const
std::
filesystem
::
path
&
old_p,
const
std::
filesystem
::
path
&
new_p,
|
(2) | (desde C++17) |
Mueve o renombra el objeto del sistema de archivos identificado por
old_p
a
new_p
como si fuera mediante la función POSIX
rename
:
- Si old_p es un archivo no-directorio, entonces new_p debe ser uno de:
-
- el mismo archivo que old_p o un enlace físico a este: no se realiza ninguna acción en este caso.
- archivo existente no-directorio: new_p es eliminado primero, luego, sin permitir que otros procesos detecten new_p como eliminado, el nombre de ruta new_p es enlazado al archivo y old_p es desenlazado del archivo. Se requieren permisos de escritura tanto para el directorio que contiene old_p como para el directorio que contiene new_p .
- archivo inexistente en un directorio existente: El nombre de ruta new_p es enlazado al archivo y old_p es desenlazado del archivo. Se requieren permisos de escritura tanto para el directorio que contiene old_p como para el directorio que contiene new_p .
- Si old_p es un directorio, entonces new_p debe ser uno de los siguientes:
-
- el mismo directorio que old_p o un enlace físico a este: no se realiza ninguna acción en este caso.
- directorio existente: new_p se elimina si está vacío en sistemas POSIX, pero esto puede ser un error en otros sistemas. Si no es un error, entonces new_p se elimina primero, luego, sin permitir que otros procesos observen new_p como eliminado, el nombre de ruta new_p se enlaza al directorio y old_p se desenlaza del directorio. Se requieren permisos de escritura tanto para el directorio que contiene old_p como para el directorio que contiene new_p .
- directorio no existente, que no termina con un separador de directorio, y cuyo directorio padre existe: El nombre de ruta new_p se enlaza al directorio y old_p se desenlaza del directorio. Se requieren permisos de escritura tanto para el directorio que contiene old_p como para el directorio que contiene new_p .
- Los enlaces simbólicos no se siguen: si old_p es un enlace simbólico, se renombra a sí mismo, no su destino. Si new_p es un enlace simbólico existente, se borra a sí mismo, no su destino.
El cambio de nombre falla si
- new_p termina con punto o con punto-punto .
- new_p nombra un directorio inexistente que termina con un separador de directorio.
- old_p es un directorio que es un ancestro de new_p .
Contenidos |
Parámetros
| old_p | - | ruta a mover o renombrar |
| new_p | - | ruta destino para la operación de mover/renombrar |
| ec | - | parámetro de salida para reporte de errores en la sobrecarga no lanzadora |
Valor de retorno
(ninguno)
Excepciones
Cualquier sobrecarga no marcada como
noexcept
puede lanzar
std::bad_alloc
si la asignación de memoria falla.
Ejemplo
#include <filesystem> #include <fstream> namespace fs = std::filesystem; int main() { std::filesystem::path p = std::filesystem::current_path() / "sandbox"; std::filesystem::create_directories(p / "from"); std::ofstream{ p / "from/file1.txt" }.put('a'); std::filesystem::create_directory(p / "to"); // fs::rename(p / "from/file1.txt", p / "to/"); // error: "to" is a directory fs::rename(p / "from/file1.txt", p / "to/file2.txt"); // OK // fs::rename(p / "from", p / "to"); // error: "to" is not empty fs::rename(p / "from", p / "to/subdir"); // OK std::filesystem::remove_all(p); }
Véase también
|
renombra un archivo
(función) |
|
|
(C++17)
(C++17)
|
elimina un archivo o directorio vacío
elimina un archivo o directorio y todo su contenido, recursivamente (función) |