Espacios de nombres
Variantes
Acciones

std::filesystem::rename

De cppreference.com
 
 
 
Definido en el archivo de encabezado <filesystem>
void rename(const std::filesystem::path& old_p,

            const std::filesystem::path& new_p);
void rename(const std::filesystem::path& old_p,
            const std::filesystem::path& new_p,

            std::error_code& ec) noexcept;
(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, entonces new_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 que new_p se ha borrado, el nombre de ruta de acceso new_p se enlaza al archivo y old_p se desenlaza del archivo. Se requieren los permisos de escritura tanto para el directorio que contiene a old_p como para el directorio que contiene a new_p.
  • un archivo no existente a un directorio existente: El nombre de ruta de acceso new_p se enlaza al archivo y old_p se desenlaza del archivo. Se requieren los permisos de escritura tanto para el directorio que contiene a old_p como para el directorio que contiene a new_p.
  • Si old_p es un directorio, entonces new_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 borra new_p, luego, sin permitir que otros procesos observen que new_p se ha borrado, el nombre de ruta de acceso new_p se enlaza al directorio y old_p se desenlaza del directorio. Se requieren los permisos de escritura tanto para el directorio que contiene a old_p como para el directorio que contiene a new_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 y old_p se desenlaza del directorio. Se requieren los permisos de escritura tanto para el directorio que contiene a old_p como para el directorio que contiene a new_p.
  • No se siguen los enlaces simbólicos: si old_p es un enlace simbólico, este se renombra, pero no su objetivo. Si new_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 de new_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) [editar]
(C++17)(C++17)
Remueve un archivo o directorio vacío.
Remueve un archivo o directorio y todo su contenido recursivamente.
(función) [editar]