std::experimental::filesystem::directory_entry:: status, std::experimental::filesystem::directory_entry:: symlink_status
From cppreference.net
<
cpp
|
experimental
|
fs
|
directory entry
|
file_status status
(
)
const
;
file_status status ( error_code & ec ) const ; |
(1) | (Filesystem TS) |
|
file_status symlink_status
(
)
const
;
file_status symlink_status ( error_code & ec ) const ; |
(2) | (Filesystem TS) |
1)
Gibt den möglicherweise zwischengespeicherten Status des Eintrags zurück, als wäre er durch einen
status
-Aufruf bestimmt worden (Symlinks werden zu ihren Zielen aufgelöst).
2)
Gibt den potenziell zwischengespeicherten Status des Eintrags zurück, als wäre er durch einen
symlink_status
-Aufruf bestimmt worden (Symlinks werden nicht verfolgt).
Inhaltsverzeichnis |
Parameter
| ec | - | Out-Parameter für Fehlerberichterstattung in der nicht-werfenden Überladung |
Rückgabewert
Der Status der durch den Eintrag referenzierten Datei.
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 Dateistatusinformationen werden in der Regel als Nebenprodukt der Verzeichnisiteration bereitgestellt, in diesem Fall werden sie zwischengespeichert und können durch diese Memberfunktionen ohne die Kosten eines zusätzlichen Systemaufrufs abgerufen werden. Während der Verzeichnisiteration ist der Aufruf von
status
unnötig und Zugriffsfunktionen wie
is_directory
sollten mit dem zwischengespeicherten Statuswert aufgerufen werden, nicht mit einem Pfad.
Beispiel
Diesen Code ausführen
#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 << " 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"); std::ofstream("sandbox/file"); // reguläre Datei erstellen 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"); // Demonstration verschiedener Statusabfragen for (auto it = fs::directory_iterator("sandbox"); it != fs::directory_iterator(); ++it) demo_status(*it, it->symlink_status()); // verwendung des gecachten 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 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
|
repräsentiert Dateityp und Berechtigungen
(Klasse) |
|
|
bestimmt Dateiattribute
bestimmt Dateiattribute unter Überprüfung des Symlink-Ziels (Funktion) |
|
|
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) |