std::filesystem::directory_entry:: status, std::filesystem::directory_entry:: symlink_status
|
std::
filesystem
::
file_status
status
(
)
const
;
|
(1) | (depuis C++17) |
|
std::
filesystem
::
file_status
status
(
std::
error_code
&
ec
)
const
noexcept
;
|
(2) | (depuis C++17) |
|
std::
filesystem
::
file_status
symlink_status
(
)
const
;
|
(3) | (depuis C++17) |
|
std::
filesystem
::
file_status
symlink_status
(
std::
error_code
&
ec
)
const
noexcept
;
|
(4) | (depuis C++17) |
Table des matières |
Paramètres
| ec | - | paramètre de sortie pour le rapport d'erreur dans la surcharge non-lancante |
Valeur de retour
Le statut du fichier référencé par l'entrée.
Exceptions
Toute surcharge non marquée
noexcept
peut lever
std::bad_alloc
si l'allocation de mémoire échoue.
Notes
De nombreuses API système de bas niveau pour la traversée de répertoires récupèrent les attributs de fichiers en même temps que l'entrée de répertoire suivante. Les constructeurs et les fonctions membres non constantes de std::filesystem::directory_iterator stockent ces attributs, s'il y en a, dans le std::filesystem::directory_entry pointé sans appeler directory_entry::refresh , ce qui permet d'examiner les attributs des entrées de répertoire pendant leur itération, sans effectuer d'appels système supplémentaires.
Exemple
#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 << " 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"); fs::create_directory("sandbox/dir"); std::ofstream{"sandbox/file"}; // create regular file 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); // 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 (prefer std::unique_ptr-based custom deleters) close(fd); fs::remove_all("sandbox"); }
Sortie possible :
"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
Voir aussi
|
met à jour les attributs de fichier en cache
(fonction membre publique) |
|
|
vérifie si l'entrée de répertoire fait référence à un objet de système de fichiers existant
(fonction membre publique) |
|
|
vérifie si l'entrée de répertoire fait référence à un périphérique bloc
(fonction membre publique) |
|
|
vérifie si l'entrée de répertoire fait référence à un périphérique caractère
(fonction membre publique) |
|
|
vérifie si l'entrée de répertoire fait référence à un répertoire
(fonction membre publique) |
|
|
vérifie si l'entrée de répertoire fait référence à un tube nommé
(fonction membre publique) |
|
|
vérifie si l'entrée de répertoire fait référence à un
autre
type de fichier
(fonction membre publique) |
|
|
vérifie si l'entrée de répertoire fait référence à un fichier régulier
(fonction membre publique) |
|
|
vérifie si l'entrée de répertoire fait référence à une socket IPC nommée
(fonction membre publique) |
|
|
vérifie si l'entrée de répertoire fait référence à un lien symbolique
(fonction membre publique) |
|
|
retourne la taille du fichier auquel l'entrée de répertoire fait référence
(fonction membre publique) |
|
|
retourne le nombre de liens physiques faisant référence au fichier auquel l'entrée de répertoire fait référence
(fonction membre publique) |
|
|
obtient l'heure de la dernière modification des données du fichier auquel l'entrée de répertoire fait référence
(fonction membre publique) |