Namespaces
Variants

std::filesystem:: is_regular_file

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

Prüft, ob der angegebene Dateistatus oder Pfad einer regulären Datei entspricht.

1) Entspricht s. type ( ) == file_type :: regular .
2,3) Entspricht is_regular_file ( status ( p ) ) oder is_regular_file ( status ( p, ec ) ) beziehungsweise.

Inhaltsverzeichnis

Parameter

s - zu prüfender Dateistatus
p - zu untersuchender Pfad
ec - Fehlercode zum Speichern des Fehlerstatus

Rückgabewert

true falls die durch p angegebene Datei oder der durch s angegebene Typ auf eine reguläre Datei verweist, false andernfalls. Die nicht-werfende Überladung gibt false zurück, falls ein Fehler auftritt.

Ausnahmen

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

2,3) Setzt einen std:: error_code & -Parameter auf den OS-API-Fehlercode, falls ein OS-API-Aufruf fehlschlägt, und führt ec. clear ( ) aus, falls keine Fehler auftreten.

Hinweise

Die werfende Überladung ist zusätzlich spezifiziert, um std::filesystem::filesystem_error zu werfen, falls status ( p ) werfen würde.

Beispiel

#include <cstdio>
#include <cstring>
#include <filesystem>
#include <fstream>
#include <iostream>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/un.h>
#include <unistd.h>
namespace fs = std::filesystem;
void demo_status(const fs::path& p, fs::file_status s)
{
    std::cout << p;
    // alternative: switch(s.type()) { case fs::file_type::regular: ...}
    if (fs::is_regular_file(s))
        std::cout << " ist eine reguläre Datei\n";
    if (fs::is_directory(s))
        std::cout << " ist ein Verzeichnis\n";
    if (fs::is_block_file(s))
        std::cout << " ist ein Blockgerät\n";
    if (fs::is_character_file(s))
        std::cout << " ist ein Zeichengerät\n";
    if (fs::is_fifo(s))
        std::cout << " ist eine benannte IPC-Pipe\n";
    if (fs::is_socket(s))
        std::cout << " ist ein benannter IPC-Socket\n";
    if (fs::is_symlink(s))
        std::cout << " ist ein Symlink\n";
    if (!fs::exists(s))
        std::cout << " existiert nicht\n";
}
int main()
{
    // Erstellen verschiedener Dateitypen
    fs::create_directory("sandbox");
    fs::create_directory("sandbox/dir");
    std::ofstream{"sandbox/file"}; // reguläre Datei erstellen
    fs::create_symlink("file", "sandbox/symlink");
    mkfifo("sandbox/pipe", 0644);
    sockaddr_un addr;
    addr.sun_family = AF_UNIX;
    std::strcpy(addr.sun_path, "sandbox/sock");
    int fd = socket(PF_UNIX, SOCK_STREAM, 0);
    bind(fd, reinterpret_cast<sockaddr*>(&addr), sizeof addr);
    // Demonstration verschiedener Statusabfragen
    for (auto it{fs::directory_iterator("sandbox")}; it != fs::directory_iterator(); ++it)
        demo_status(*it, it->symlink_status()); // verwendung des zwischengespeicherten Status aus dem Verzeichniseintrag
    demo_status("/dev/null", fs::status("/dev/null")); // direkte Statusaufrufe
    demo_status("/dev/sda", fs::status("/dev/sda"));
    demo_status("sandbox/no", fs::status("/sandbox/no"));
    // Bereinigung (bevorzuge std::unique_ptr-basierte benutzerdefinierte Löscher)
    close(fd);
    fs::remove_all("sandbox");
}

Mögliche Ausgabe:

"sandbox/file" ist eine reguläre Datei
"sandbox/dir" ist ein Verzeichnis
"sandbox/pipe" ist eine benannte IPC-Pipe
"sandbox/sock" ist ein benannter IPC-Socket
"sandbox/symlink" ist ein Symlink
"/dev/null" ist ein Zeichengerät
"/dev/sda" ist ein Blockgerät
"sandbox/no" existiert nicht

Siehe auch

(C++17)
der Typ einer Datei
(Enumeration)
(C++17) (C++17)
bestimmt Dateiattribute
bestimmt Dateiattribute, überprüft das Symlink-Ziel
(Funktion)
repräsentiert Dateityp und Berechtigungen
(Klasse)
prüft, ob der Dateistatus bekannt ist
(Funktion)
prüft, ob der angegebene Pfad auf ein Blockgerät verweist
(Funktion)
prüft, ob der angegebene Pfad auf ein Zeichengerät verweist
(Funktion)
prüft, ob der angegebene Pfad auf ein Verzeichnis verweist
(Funktion)
(C++17)
prüft, ob der angegebene Pfad auf eine benannte Pipe verweist
(Funktion)
(C++17)
prüft, ob das Argument auf eine andere Datei verweist
(Funktion)
(C++17)
prüft, ob das Argument auf einen benannten IPC-Socket verweist
(Funktion)
(C++17)
prüft, ob das Argument auf einen symbolischen Link verweist
(Funktion)
(C++17)
prüft, ob der Pfad auf ein existierendes Dateisystemobjekt verweist
(Funktion)
prüft, ob der Verzeichniseintrag auf eine reguläre Datei verweist
(öffentliche Memberfunktion von std::filesystem::directory_entry )