Namespaces
Variants

std::experimental::filesystem:: rename

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

#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)