Namespaces
Variants

std::filesystem::directory_entry:: assign

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

Weist dem Verzeichniseintragsobjekt neuen Inhalt zu. Setzt den Pfad auf p und ruft refresh auf, um die zwischengespeicherten Attribute zu aktualisieren. Tritt ein Fehler auf, sind die Werte der zwischengespeicherten Attribute nicht spezifiziert.

Diese Funktion führt keine Änderungen am Dateisystem durch.

Inhaltsverzeichnis

Parameter

p - Pfad zum Dateisystemobjekt, auf das der Verzeichniseintrag verweisen wird
ec - Out-Parameter für Fehlerberichterstattung in der nicht-werfenden Überladung

Rückgabewert

(keine)

Ausnahmen

Jede Überladung, die nicht als noexcept gekennzeichnet ist, kann std::bad_alloc werfen, wenn die Speicherallokation fehlschlägt.

1) Wirft std::filesystem::filesystem_error bei zugrundeliegenden OS-API-Fehlern, konstruiert mit p als erstem Pfadargument und dem OS-Fehlercode als Fehlercodeargument.
2) Setzt einen std:: error_code & Parameter auf den OS-API-Fehlercode, wenn ein OS-API-Aufruf fehlschlägt, und führt ec. clear ( ) aus, wenn keine Fehler auftreten.

Beispiel

#include <filesystem>
#include <fstream>
#include <iostream>
void print_entry_info(const std::filesystem::directory_entry& entry)
{
    if (std::cout << "Der Eintrag " << entry; not entry.exists())
    {
        std::cout << " existiert nicht im Dateisystem\n";
        return;
    }
    std::cout << " ist ";
    if (entry.is_directory())
        std::cout << "ein Verzeichnis\n";
    if (entry.is_regular_file())
        std::cout << "eine reguläre Datei\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); // der Eintrag enthält noch den alten "Zustand"
    std::cout << "entry.assign();\n";
    entry.assign(entry); // oder einfach entry.refresh() aufrufen
    print_entry_info(entry);
}

Mögliche Ausgabe:

Der Eintrag "/tmp" ist ein Verzeichnis
entry.assign();
Der Eintrag "/tmp/cppreference.html" ist eine reguläre Datei
remove(entry);
Der Eintrag "/tmp/cppreference.html" ist eine reguläre Datei
entry.assign();
Der Eintrag "/tmp/cppreference.html" existiert nicht im Dateisystem

Siehe auch

weist Inhalte zu
(öffentliche Elementfunktion)