std::filesystem::directory_entry::exists
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) |