Namespaces
Variants

std::filesystem:: rename

From cppreference.net
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,

std:: error_code & ec ) noexcept ;
(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.

1) Lanza std::filesystem::filesystem_error en errores de la API del sistema operativo subyacente, construido con old_p como primer argumento de ruta, new_p como segundo argumento de ruta, y el código de error del sistema operativo como argumento de código de error.
2) Establece un parámetro std:: error_code & al código de error de la API del sistema operativo si una llamada a la API del SO falla, y ejecuta ec. clear ( ) si no ocurren errores.

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)