std::experimental::filesystem:: rename
From cppreference.net
<
cpp
|
experimental
|
fs
|
Definido en el encabezado
<experimental/filesystem>
|
||
|
void
rename
(
const
path
&
old_p,
const
path
&
new_p
)
;
void rename ( const path & old_p, const path & new_p, std:: error_code & ec ) ; |
(filesystem TS) | |
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 él: no se realiza ninguna acción en este caso.
- archivo existente no directorio: 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 archivo y old_p se desenlaza 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 se enlaza al archivo y old_p se desenlaza 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 antecesor 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
The overload that does not take an error_code & parameter throws filesystem_error on underlying OS API errors, constructed with old_p as the first argument, new_p as the second argument, and the OS error code as the error code argument. std:: bad_alloc may be thrown if memory allocation fails. The overload taking an error_code & parameter sets it to the OS API error code if an OS API call fails, and executes ec. clear ( ) if no errors occur. This overload has
noexcept
especificación:
noexcept
Ejemplo
Ejecutar este código
#include <experimental/filesystem> #include <fstream> #include <iostream> namespace fs = std::experimental::filesystem; int main() { fs::path p = fs::current_path() / "sandbox"; fs::create_directories(p/"from"); std::ofstream(p/"from/file1.txt").put('a'); fs::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 fs::remove_all(p); }
Véase también
|
renombra un archivo
(función) |
|
|
elimina un archivo o directorio vacío
elimina un archivo o directorio y todo su contenido, recursivamente (función) |