Namespaces
Variants

std::filesystem:: exists

From cppreference.net
Definido en el encabezado <filesystem>
bool exists ( std:: filesystem :: file_status s ) noexcept ;
(1) (desde C++17)
bool exists ( const std:: filesystem :: path & p ) ;
(2) (desde C++17)
bool exists ( const std:: filesystem :: path & p, std:: error_code & ec ) noexcept ;
(3) (desde C++17)

Comprueba si el estado del archivo o la ruta proporcionada corresponde a un archivo o directorio existente.

1) Equivalente a status_known ( s ) && s. type ( ) ! = file_type :: not_found .
2,3) Sea s un std:: filesystem :: file_status determinado como si por status ( p ) o status ( p, ec ) (los enlaces simbólicos son seguidos), respectivamente. Retorna exists ( s ) . La sobrecarga que no lanza excepciones llama a ec. clear ( ) si status_known ( s ) .

Contenidos

Parámetros

s - estado del archivo a verificar
p - ruta a examinar
ec - parámetro de salida para reporte de errores en la sobrecarga no lanzadora

Valor de retorno

true si la ruta o estado de archivo dado corresponde a un archivo o directorio existente, false en caso contrario.

Excepciones

Cualquier sobrecarga no marcada como noexcept puede lanzar std::bad_alloc si la asignación de memoria falla.

2) Lanza std::filesystem::filesystem_error en errores de la API del sistema operativo subyacente, construido con p como primer argumento de ruta y el código de error del sistema operativo como argumento de código de error.
3) Establece un parámetro std:: error_code & al código de error de la API del sistema operativo si una llamada a la API del SO falla, y ejecuta ec. clear ( ) si no ocurren errores.

No se lanza una excepción del sistema de archivos si el objeto no existe (utilice el valor de retorno).

Notas

La información proporcionada por esta función normalmente también se ofrece como subproducto de la iteración de directorios. Durante la iteración de directorios, llamar exists ( * iterator ) es menos eficiente que exists ( iterator - > status ( ) ) .

Ejemplo

#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 << " exists\n";
    else
        std::cout << " does not exist\n";
}
int main()
{
    const fs::path sandbox{"sandbox"};
    fs::create_directory(sandbox);
    std::ofstream{sandbox/"file"}; // create regular file
    fs::create_symlink("non-existing", sandbox/"symlink");
    demo_exists(sandbox);
    for (const auto& entry : fs::directory_iterator(sandbox))
        demo_exists(entry, entry.status()); // use cached status from directory entry
    fs::remove_all(sandbox);
}

Salida:

"sandbox" exists
"sandbox/symlink" does not exist
"sandbox/file" exists

Véase también

(C++17) (C++17)
determina los atributos del archivo
determina los atributos del archivo, verificando el destino del enlace simbólico
(función)
representa el tipo de archivo y permisos
(clase)
verifica si la entrada de directorio hace referencia a un objeto del sistema de archivos existente
(función miembro pública de std::filesystem::directory_entry )