Namespaces
Variants

std::experimental::filesystem:: status, std::experimental::filesystem:: symlink_status

From cppreference.net
Definiert im Header <experimental/filesystem>
file_status status ( const path & p ) ;
file_status status ( const path & p, error_code & ec ) noexcept ;
(1) (Filesystem TS)
file_status symlink_status ( const path & p ) ;
file_status symlink_status ( const path & p, error_code & ec ) noexcept ;
(2) (Filesystem TS)
1) Bestimmt den Typ und die Attribute des Dateisystemobjekts, das durch p identifiziert wird, wie durch POSIX stat (Symlinks werden zu ihren Zielen verfolgt).
  • Wenn p eine reguläre Datei ist, gibt file_status ( file_type :: regular ) zurück.
  • Wenn p ein Verzeichnis ist, gibt file_status ( file_type :: directory ) zurück.
  • Wenn p eine blockorientierte Spezialdatei ist, gibt file_status ( file_type :: block ) zurück.
  • Wenn p eine zeichenorientierte Spezialdatei ist, gibt file_status ( file_type :: character ) zurück.
  • Wenn p eine FIFO- oder Pipe-Datei ist, gibt file_status ( file_type :: fifo ) zurück.
  • Wenn p ein Socket ist, gibt file_status ( file_type :: socket ) zurück.
  • Wenn p nicht existiert, gibt file_status ( file_type :: not_found ) zurück.
  • Wenn p existiert, aber die Dateiattribute nicht bestimmt werden können, z.B. aufgrund fehlender Berechtigungen, gibt file_status ( file_type :: unknown ) zurück.
  • Wenn Fehler verhindern, überhaupt festzustellen, ob p existiert, setzt die nicht-werfende Überladung ec und gibt file_status ( file_type :: none ) zurück, und die werfende Überladung wirft filesystem_error .
  • Andernfalls gibt file_status ( file_type :: unknown ) zurück.
2) Gleich wie (1) außer dass das Verhalten so ist, als ob die POSIX-Funktion lstat verwendet wird (Symlinks werden nicht verfolgt):
  • Wenn p ein Symlink ist, gibt file_status ( file_type :: symlink ) zurück.

Inhaltsverzeichnis

Parameter

p - zu untersuchender Pfad
ec - Out-Parameter für Fehlerberichterstattung in der nicht-werfenden Überladung

Rückgabewert

Der Dateistatus (ein file_status -Objekt).

Ausnahmen

The overload that does not take an error_code & parameter throws filesystem_error on underlying OS API errors, constructed with p as the first argument and the OS error code as the error code argument. std:: bad_alloc may be thrown if memory allocation fails. The overload taking an error_code & parameter sets it to the OS API error code if an OS API call fails, and executes ec. clear ( ) if no errors occur. This overload has
noexcept Spezifikation:
noexcept

Hinweise

Die von dieser Funktion bereitgestellten Informationen werden normalerweise auch als Nebenprodukt der Verzeichnisiteration bereitgestellt und können durch die Memberfunktionen von directory_entry erhalten werden. Während der Verzeichnisiteration ist ein erneutes Aufrufen von status unnötig.

Beispiel

#include <cstdio>
#include <cstring>
#include <experimental/filesystem>
#include <fstream>
#include <iostream>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/un.h>
#include <unistd.h>
namespace fs = std::experimental::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 << " is a regular file\n";
    if (fs::is_directory(s))
        std::cout << " is a directory\n";
    if (fs::is_block_file(s))
        std::cout << " is a block device\n";
    if (fs::is_character_file(s))
        std::cout << " is a character device\n";
    if (fs::is_fifo(s))
        std::cout << " is a named IPC pipe\n";
    if (fs::is_socket(s))
        std::cout << " is a named IPC socket\n";
    if (fs::is_symlink(s))
        std::cout << " is a symlink\n";
    if (!fs::exists(s))
        std::cout << " does not exist\n";
}
int main()
{
    // create files of different kinds
    fs::create_directory("sandbox");
    std::ofstream("sandbox/file"); // create regular file
    fs::create_directory("sandbox/dir");
    mkfifo("sandbox/pipe", 0644);
    struct 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, (struct sockaddr*)&addr, sizeof addr);
    fs::create_symlink("file", "sandbox/symlink");
    // demo different status accessors
    for (auto it = fs::directory_iterator("sandbox"); it != fs::directory_iterator(); ++it)
        demo_status(*it, it->symlink_status()); // use cached status from directory entry
    demo_status("dev/null", fs::status("/dev/null")); // direct calls to status
    demo_status("dev/sda", fs::status("/dev/sda"));
    demo_status("sandbox/no", fs::status("/sandbox/no"));
    // cleanup
    close(fd);
    fs::remove_all("sandbox");
}

Mögliche Ausgabe:

"sandbox/file" is a regular file
"sandbox/dir" is a directory
"sandbox/pipe" is a named IPC pipe
"sandbox/sock" is a named IPC socket
"sandbox/symlink" is a symlink
"dev/null" is a character device
"dev/sda" is a block device
"sandbox/no" does not exist

Siehe auch

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)
prüft, ob der angegebene Pfad auf eine benannte Pipe verweist
(Funktion)
prüft, ob das Argument auf eine andere Datei verweist
(Funktion)
prüft, ob das Argument auf eine reguläre Datei verweist
(Funktion)
prüft, ob das Argument auf einen benannten IPC-Socket verweist
(Funktion)
prüft, ob das Argument auf einen symbolischen Link verweist
(Funktion)
prüft, ob der Pfad auf ein existierendes Dateisystemobjekt verweist
(Funktion)
zwischengespeicherter Status der durch diesen Verzeichniseintrag bezeichneten Datei
zwischengespeicherter symlink_status der durch diesen Verzeichniseintrag bezeichneten Datei
(öffentliche Mitgliedsfunktion von std::experimental::filesystem::directory_entry )