close
Espacios de nombres
Variantes

std::filesystem::directory_entry::exists

De cppreference.com
 
 
 
 
<tbody> </tbody>
bool exists() const; bool exists( std::error_code& ec ) const noexcept;
(desde C++17)

Verifica si el objeto al que se apunta existe. Efectivamente devuelve std::filesystem::exists(status()) o std::filesystem::exists(status(ec)), respectivamente.

Parámetros

ec - El parámetro de salida para informe de errores en la sobrecarga que no lanza excepciones.

Valor de retorno

true si el objeto del sistema de archivos al que se hace referencia existe, false de lo contrario.

Excepciones

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.

Ejemplo

#include <filesystem>
#include <fstream>
#include <iostream>
#include <string>

namespace fs = std::filesystem;

int main()
{
    // almacenar ruta actual y restaurarla a la salida
    const auto old_current_path = fs::current_path();

    // crear directorio "sanbox" en directorio temporal
    const auto dir_sandbox = fs::temp_directory_path() / "sandbox";

    if (!fs::create_directory(dir_sandbox)) {
        std::cout << "ERROR #1" << '\n';
        return -1;
    }

    fs::current_path(dir_sandbox); // cambiar al directorio justamente creado

    fs::directory_entry entry_sandbox { dir_sandbox };
    if (!entry_sandbox.exists()) {
        std::cout << "ERROR #2" << '\n';
        return -1;
    }

    std::cout << "Directorio actual: " << entry_sandbox.path().filename() << '\n';

    fs::path path_tmp_file = dir_sandbox / "tmp_file";

    std::ofstream file( path_tmp_file.string() ); // crear archivo regular
    file << "es.cppreference.com"; // escribir 19 bytes
    file.flush();

    fs::directory_entry entry_tmp_file{ path_tmp_file };

    if (entry_tmp_file.exists()) {
        std::cout << "Archivo " << entry_tmp_file.path().filename()
                  << " tiene tamaño: " << entry_tmp_file.file_size() << '\n';
    } else {
        std::cout << "ERROR #3" << '\n';
    }

    // limpieza
    fs::current_path(old_current_path);
    fs::remove_all(dir_sandbox);
}

Posible salida:

Directorio actual: "sandbox"
Archivo "tmp_file" tiene tamaño: 19

Véase también

(C++17)
Verifica si una ruta de acceso se refiere a un objeto existente del sistema de archivos.
(función) [editar]