Espacios de nombres
Variantes
Acciones

std::filesystem::exists

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

Verifica si el estado de archivo o ruta de acceso dados corresponden a un archivo o directorio existentes.

1) Equivalente a status_known(s) && s.type() != file_type::not_found.
2) Sea s un estado de archivo std::filesystem::file_status determinado como si fuera por status(p) o status(p, ec) (se siguen los enlaces simbólicos), respectivamente. Devuelve exists(s). La sobrecarga que no lanza excepcionesllama a ec.clear() si status_known(s).

Contenido

[editar] Parámetros

s - El estado de archivo a examinar
p - La ruta de acceso a examinar.
ec - El parámetro de salida para reportar errores en la sobrecarga que no lanza.

[editar] Valor de retorno

true si la ruta de acceso o el estado de archivo dados corresponden a un archivo o directorio existentes, false de lo contrario.

[editar] Excepciones

2) La sobrecarga que no toma un parámetro std::error_code& lanza filesystem::filesystem_error en los errores de la API del sistema operativo subyacente, construido con p como el primer argumento de la ruta de acceso y el código de error del sistema operativo como el argumento del código de error. La sobrecarga que toma un parámetro std::error_code& lo establece en el código de error de la API del sistema operativo si una llamada a la API del sistema operativo falla, y ejecuta ec.clear() si no ocurren errores. Cualquier sobrecarga que no está marcada con noexcept puede lanzar std::bad_alloc si la asignación de memoria falla.

[editar] Notas

La información proporcionada por esta función generalmente también se proporciona como un subproducto de la iteración del directorio. Durante la iteración del directorio, llamar a exists(*iterator) es menos eficiente que exists(iterator->status()).

[editar] Ejemplo

#include <iostream>
#include <fstream>
#include <cstdint>
#include <filesystem>
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 << " no existe\n";
}
int main()
{
    fs::create_directory("entorno_aislado");
    std::ofstream("entorno_aislado/archivo"); // crear archivo regular
    fs::create_symlink("non-existing", "entorno_aislado/symlink");
 
    demo_exists("entorno_aislado");
    for(auto it = fs::directory_iterator("entorno_aislado"); it != fs::directory_iterator(); ++it)
        demo_exists(*it, it->status()); // usar el estado de la caché de la entrada de directorio
    fs::remove_all("entorno_aislado");
}

Salida:

"entorno_aislado" existe
"entorno_aislado/archivo" existe
"entorno_aislado/symlink" no existe

[editar] Véase también

(C++17)(C++17)
Determina los atributos de archivo.
Determina los atributos de archivo, verificando el objetivo del enlace simbólico.
(función) [editar]
Representa el tipo y permisos de archivo.
(clase) [editar]
Verifica si la entrada de directorio se refiere a un objeto existente en el sistema de archivos.
(función miembro pública de std::filesystem::directory_entry) [editar]