Namespaces
Variants

std::filesystem::directory_entry:: status, std::filesystem::directory_entry:: symlink_status

From cppreference.net
(1) (depuis C++17)
(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)
1,2) Retourne le statut de l'entrée, comme déterminé par un appel filesystem::status (les liens symboliques sont suivis vers leurs cibles).
3,4) Retourne le statut de l'entrée, comme déterminé par un appel à filesystem::symlink_status (les liens symboliques ne sont pas suivis).

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.

1,3) Lance std::filesystem::filesystem_error en cas d'erreurs de l'API système sous-jacente, construit avec p comme premier argument de chemin et le code d'erreur du système comme argument de code d'erreur.
2,4) Définit un paramètre std:: error_code & sur le code d'erreur de l'API du système d'exploitation si un appel d'API système échoue, et exécute ec. clear ( ) si aucune erreur ne survient.

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)