Namespaces
Variants

std::filesystem:: exists

From cppreference.net
Défini dans l'en-tête <filesystem>
bool exists ( std:: filesystem :: file_status s ) noexcept ;
(1) (depuis C++17)
bool exists ( const std:: filesystem :: path & p ) ;
(2) (depuis C++17)
bool exists ( const std:: filesystem :: path & p, std:: error_code & ec ) noexcept ;
(3) (depuis C++17)

Vérifie si le statut de fichier ou le chemin donné correspond à un fichier ou répertoire existant.

1) Équivalent à status_known ( s ) && s. type ( ) ! = file_type :: not_found .
2,3) Soit s un std:: filesystem :: file_status déterminé comme par status ( p ) ou status ( p, ec ) (les liens symboliques sont suivis), respectivement. Retourne exists ( s ) . La surcharge non-lancante appelle ec. clear ( ) si status_known ( s ) .

Table des matières

Paramètres

s - statut du fichier à vérifier
p - chemin à examiner
ec - paramètre de sortie pour le rapport d'erreur dans la surcharge non-lançante

Valeur de retour

true si le chemin ou l'état de fichier donné correspond à un fichier ou répertoire existant, false dans le cas contraire.

Exceptions

Toute surcharge non marquée noexcept peut lever std::bad_alloc si l'allocation de mémoire échoue.

2) 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.
3) Définit un paramètre std:: error_code & au 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.

Aucune exception du système de fichiers n'est levée si l'objet n'existe pas (utilisez la valeur de retour).

Notes

Les informations fournies par cette fonction sont généralement également disponibles comme sous-produit de l'itération de répertoire. Pendant l'itération de répertoire, appeler exists ( * iterator ) est moins efficace que exists ( iterator - > status ( ) ) .

Exemple

#include <cstdint>
#include <filesystem>
#include <fstream>
#include <iostream>
namespace fs = std::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 << " existe\n";
    else
        std::cout << " n'existe pas\n";
}
int main()
{
    const fs::path sandbox{"sandbox"};
    fs::create_directory(sandbox);
    std::ofstream{sandbox/"file"}; // créer un fichier régulier
    fs::create_symlink("non-existing", sandbox/"symlink");
    demo_exists(sandbox);
    for (const auto& entry : fs::directory_iterator(sandbox))
        demo_exists(entry, entry.status()); // utiliser le statut mis en cache de l'entrée de répertoire
    fs::remove_all(sandbox);
}

Sortie :

"sandbox" existe
"sandbox/symlink" n'existe pas
"sandbox/file" existe

Voir aussi

(C++17) (C++17)
détermine les attributs de fichier
détermine les attributs de fichier en vérifiant la cible du lien symbolique
(fonction)
représente le type de fichier et les permissions
(classe)
vérifie si l'entrée de répertoire fait référence à un objet de système de fichiers existant
(fonction membre publique de std::filesystem::directory_entry )