Namespaces
Variants

std::filesystem:: exists

From cppreference.net
Definiert im Header <filesystem>
bool exists ( std:: filesystem :: file_status s ) noexcept ;
(1) (seit C++17)
bool exists ( const std:: filesystem :: path & p ) ;
(2) (seit C++17)
bool exists ( const std:: filesystem :: path & p, std:: error_code & ec ) noexcept ;
(3) (seit C++17)

Prüft, ob der angegebene Dateistatus oder Pfad einer existierenden Datei oder einem existierenden Verzeichnis entspricht.

1) Entspricht status_known ( s ) && s. type ( ) ! = file_type :: not_found .
2,3) Sei s ein std:: filesystem :: file_status , bestimmt wie durch status ( p ) oder status ( p, ec ) (Symlinks werden verfolgt), jeweils. Gibt exists ( s ) zurück. Die nicht-werfende Überladung ruft ec. clear ( ) auf, falls status_known ( s ) .

Inhaltsverzeichnis

Parameter

s - zu prüfender Dateistatus
p - zu untersuchender Pfad
ec - Ausgabeparameter für Fehlerberichterstattung in der nicht-werfenden Überladung

Rückgabewert

true wenn der angegebene Pfad oder Dateistatus einer existierenden Datei oder einem existierenden Verzeichnis entspricht, false andernfalls.

Ausnahmen

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

2) Wirft std::filesystem::filesystem_error bei zugrundeliegenden OS-API-Fehlern, konstruiert mit p als erstem Pfadargument und dem OS-Fehlercode als Fehlercodeargument.
3) 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.

Keine Filesystem-Exception wird geworfen, wenn das Objekt nicht existiert (verwenden Sie den Rückgabewert).

Hinweise

Die von dieser Funktion bereitgestellten Informationen werden normalerweise auch als Nebenprodukt der Verzeichnisiteration bereitgestellt. Während der Verzeichnisiteration ist der Aufruf von exists ( * iterator ) weniger effizient als exists ( iterator - > status ( ) ) .

Beispiel

#include <cstdint>
#include <filesystem>
#include <fstream>
#include <iostream>
namespace fs = std::filesystem;
void demo_exists(const fs::path& p, fs::file_status s = fs::file_status{})
{
    std::cout << p;
    if (fs::status_known(s) ? fs::exists(s) : fs::exists(p))
        std::cout << " exists\n";
    else
        std::cout << " does not exist\n";
}
int main()
{
    const fs::path sandbox{"sandbox"};
    fs::create_directory(sandbox);
    std::ofstream{sandbox/"file"}; // create regular file
    fs::create_symlink("non-existing", sandbox/"symlink");
    demo_exists(sandbox);
    for (const auto& entry : fs::directory_iterator(sandbox))
        demo_exists(entry, entry.status()); // use cached status from directory entry
    fs::remove_all(sandbox);
}

Ausgabe:

"sandbox" exists
"sandbox/symlink" does not exist
"sandbox/file" exists

Siehe auch

(C++17) (C++17)
Bestimmt Dateiattribute
Bestimmt Dateiattribute, überprüft das Symlink-Ziel
(Funktion)
Repräsentiert Dateityp und Berechtigungen
(Klasse)
Überprüft, ob der Verzeichniseintrag auf ein existierendes Dateisystemobjekt verweist
(Öffentliche Mitgliedsfunktion von std::filesystem::directory_entry )