Namespaces
Variants

std::filesystem::directory_entry:: assign

From cppreference.net
void assign ( const std:: filesystem :: path & p ) ;
(1) (desde C++17)
void assign ( const std:: filesystem :: path & p, std:: error_code & ec ) ;
(2) (desde C++17)

Asigna nuevo contenido al objeto de entrada de directorio. Establece la ruta a p y llama a refresh para actualizar los atributos en caché. Si ocurre un error, los valores de los atributos en caché no están especificados.

Esta función no confirma ningún cambio en el sistema de archivos.

Contenidos

Parámetros

p - ruta al objeto del sistema de archivos al que hará referencia la entrada del directorio
ec - parámetro de salida para reporte de errores en la sobrecarga que no lanza excepciones

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 p como primer 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 sistema operativo falla, y ejecuta ec. clear ( ) si no ocurren errores.

Ejemplo

#include <filesystem>
#include <fstream>
#include <iostream>
void print_entry_info(const std::filesystem::directory_entry& entry)
{
    if (std::cout << "La entrada " << entry; not entry.exists())
    {
        std::cout << " no existe en el sistema de archivos\n";
        return;
    }
    std::cout << " es ";
    if (entry.is_directory())
        std::cout << "un directorio\n";
    if (entry.is_regular_file())
        std::cout << "un archivo regular\n";
    /*...*/
}
int main()
{
    std::filesystem::current_path(std::filesystem::temp_directory_path());
    std::filesystem::directory_entry entry{std::filesystem::current_path()};
    print_entry_info(entry);
    std::filesystem::path name{"cppreference.html"};
    std::ofstream{name} << "C++";
    std::cout << "entry.assign();\n";
    entry.assign(entry/name);
    print_entry_info(entry);
    std::cout << "remove(entry);\n";
    std::filesystem::remove(entry);
    print_entry_info(entry); // la entrada aún contiene el "estado" anterior
    std::cout << "entry.assign();\n";
    entry.assign(entry); // o simplemente llamar a entry.refresh()
    print_entry_info(entry);
}

Salida posible:

La entrada "/tmp" es un directorio
entry.assign();
La entrada "/tmp/cppreference.html" es un archivo regular
remove(entry);
La entrada "/tmp/cppreference.html" es un archivo regular
entry.assign();
La entrada "/tmp/cppreference.html" no existe en el sistema de archivos

Véase también

asigna contenidos
(función miembro pública)