Namensräume
Varianten
Aktionen

std::filesystem::directory_entry::assign

Von cppreference.com
 
 
 
 
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 Verzeichnis-Eintrags-Objekt neuen Inhalt zu. Setzt den Pfad auf p und ruft refresh auf, um die zwischengespeicherten Attribute zu aktualisieren. Wenn ein Fehler auftritt, sind die Werte der zwischengespeicherten Attribute undefiniert.

Diese Funktion committet keine Änderungen an das Dateisystem.

Inhalt

[bearbeiten] Parameter

p - Pfad zum Dateisystemobjekt, auf das sich der Verzeichniseintrag beziehen wird
ec - Ausgabeparameter für die Fehlerberichterstattung in der nicht auslösenden Überladung

[bearbeiten] Rückgabewert

(keine)

[bearbeiten] Ausnahmen

Jede Überladung, die nicht als noexcept markiert ist, kann std::bad_alloc auslösen, wenn die Speicherzuweisung fehlschlägt.

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

[bearbeiten] Beispiel

#include <filesystem>
#include <fstream>
#include <iostream>
 
void print_entry_info(const std::filesystem::directory_entry& entry)
{
    if (std::cout << "The entry " << entry; not entry.exists())
    {
        std::cout << " does not exists on the file system\n";
        return;
    }
    std::cout << " is ";
    if (entry.is_directory())
        std::cout << "a directory\n";
    if (entry.is_regular_file())
        std::cout << "a regular file\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); // the entry still contains old "state"
 
    std::cout << "entry.assign();\n";
    entry.assign(entry); // or just call entry.refresh()
    print_entry_info(entry);
}

Mögliche Ausgabe

The entry "/tmp" is a directory
entry.assign();
The entry "/tmp/cppreference.html" is a regular file
remove(entry);
The entry "/tmp/cppreference.html" is a regular file
entry.assign();
The entry "/tmp/cppreference.html" does not exists on the file system

[bearbeiten] Siehe auch

weist Inhalte zu
(öffentliche Memberfunktion) [bearbeiten]