std::experimental::filesystem:: exists
From de.cppreference.net
<
cpp
|
experimental
|
fs
|
Definiert im Header
<experimental/filesystem>
|
||
|
bool
exists
(
file_status s
)
|
(1) | (filesystem TS) |
|
bool
exists
(
const
path
&
p
)
;
bool exists ( const path & p, error_code & ec ) |
(2) | (filesystem TS) |
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)
Entspricht
exists
(
status
(
p
)
)
oder
exists
(
status
(
p, ec
)
)
(Symlinks werden verfolgt). Die nicht-werfende Überladung gibt
false
zurück, falls ein Fehler auftritt.
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
1)
noexcept
Spezifikation:
noexcept
2)
Die Überladung, die keinen
error_code
&
Parameter akzeptiert, wirft bei zugrundeliegenden OS-API-Fehlern
filesystem_error
, konstruiert mit
p
als erstem Argument und dem OS-Fehlercode als Fehlercode-Argument.
std::
bad_alloc
kann geworfen werden, wenn die Speicherallokation fehlschlägt. Die Überladung, die einen
error_code
&
Parameter akzeptiert, setzt diesen auf den OS-API-Fehlercode, wenn ein OS-API-Aufruf fehlschlägt, und führt
ec.
clear
(
)
aus, wenn keine Fehler auftreten. Diese Überladung hat
noexcept
Spezifikation:
noexcept
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
Diesen Code ausführen
#include <cstdint> #include <experimental/filesystem> #include <fstream> #include <iostream> namespace fs = std::experimental::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() { fs::create_directory("sandbox"); std::ofstream("sandbox/file"); // create regular file fs::create_symlink("non-existing", "sandbox/symlink"); demo_exists("sandbox"); for (auto it = fs::directory_iterator("sandbox"); it != fs::directory_iterator(); ++it) demo_exists(*it, it->status()); // use cached status from directory entry fs::remove_all("sandbox"); }
Ausgabe:
"sandbox" exists "sandbox/file" exists "sandbox/symlink" does not exist
Siehe auch
|
bestimmt Dateiattribute
bestimmt Dateiattribute, überprüft das Symlink-Ziel (Funktion) |
|
|
repräsentiert Dateityp und Berechtigungen
(Klasse) |
|
|
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
)
|