Namespaces
Variants

std::filesystem::directory_entry:: assign

From cppreference.net
void assign ( const std:: filesystem :: path & p ) ;
(1) (начиная с C++17)
void assign ( const std:: filesystem :: path & p, std:: error_code & ec ) ;
(2) (начиная с C++17)

Назначает новое содержимое объекту записи каталога. Устанавливает путь в значение p и вызывает refresh для обновления кэшированных атрибутов. При возникновении ошибки значения кэшированных атрибутов не определены.

Эта функция не вносит никаких изменений в файловую систему.

Содержание

Параметры

p - путь к объекту файловой системы, на который будет ссылаться запись каталога
ec - выходной параметр для сообщения об ошибках в непорождающей исключения перегрузке

Возвращаемое значение

(нет)

Исключения

Любая перегрузка, не помеченная noexcept , может выбрасывать std::bad_alloc при неудачном выделении памяти.

1) Выбрасывает std::filesystem::filesystem_error при ошибках в нижележащем API ОС, созданный с p в качестве первого аргумента пути и кодом ошибки ОС в качестве аргумента кода ошибки.
2) Устанавливает параметр std:: error_code & в код ошибки API операционной системы при сбое вызова OS API, и выполняет ec. clear ( ) если ошибок не происходит.

Пример

#include <filesystem>
#include <fstream>
#include <iostream>
void print_entry_info(const std::filesystem::directory_entry& entry)
{
    if (std::cout << "Элемент " << entry; not entry.exists())
    {
        std::cout << " не существует в файловой системе\n";
        return;
    }
    std::cout << " является ";
    if (entry.is_directory())
        std::cout << "директорией\n";
    if (entry.is_regular_file())
        std::cout << "обычным файлом\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); // запись всё ещё содержит старое "состояние"
    std::cout << "entry.assign();\n";
    entry.assign(entry); // или просто вызвать entry.refresh()
    print_entry_info(entry);
}

Возможный вывод:

Элемент "/tmp" является директорией
entry.assign();
Элемент "/tmp/cppreference.html" является обычным файлом
remove(entry);
Элемент "/tmp/cppreference.html" является обычным файлом
entry.assign();
Элемент "/tmp/cppreference.html" не существует в файловой системе

Смотрите также

присваивает содержимое
(публичная функция-член)