std::filesystem::exists
De cppreference.com
< cpp | filesystem
<tbody>
</tbody>
| 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).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. |
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.
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.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()).
Ejemplo
| Esta sección está incompleta Razón: cambiar a directory_entry::exists |
Ejecuta este código
#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
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) |
(C++17) |
Representa el tipo y permisos de archivo. (clase) |
| 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)
|