Namespaces
Variants

std::filesystem:: exists

From cppreference.net
Определено в заголовке <filesystem>
bool exists ( std:: filesystem :: file_status s ) noexcept ;
(1) (начиная с C++17)
bool exists ( const std:: filesystem :: path & p ) ;
(2) (начиная с C++17)
bool exists ( const std:: filesystem :: path & p, std:: error_code & ec ) noexcept ;
(3) (начиная с C++17)

Проверяет, соответствует ли заданный статус файла или путь существующему файлу или каталогу.

1) Эквивалентно status_known ( s ) && s. type ( ) ! = file_type :: not_found .
2,3) Пусть s будет std:: filesystem :: file_status , определённым как если бы с помощью status ( p ) или status ( p, ec ) (символические ссылки отслеживаются), соответственно. Возвращает exists ( s ) . Нетормозящая перегрузка вызывает ec. clear ( ) , если status_known ( s ) .

Содержание

Параметры

s - статус файла для проверки
p - путь для проверки
ec - выходной параметр для сообщения об ошибках в непорождающей перегрузке

Возвращаемое значение

true если указанный путь или статус файла соответствует существующему файлу или директории, false в противном случае.

Исключения

Любая перегрузка, не помеченная noexcept , может выбрасывать std::bad_alloc при неудачном выделении памяти.

2) Выбрасывает std::filesystem::filesystem_error при ошибках API базовой ОС, созданный с p в качестве первого аргумента пути и кодом ошибки ОС в качестве аргумента кода ошибки.
3) Устанавливает параметр std:: error_code & в код ошибки API ОС при сбое вызова API ОС и выполняет ec. clear ( ) при отсутствии ошибок.

Исключение файловой системы не выбрасывается, если объект не существует (используйте возвращаемое значение).

Примечания

Информация, предоставляемая этой функцией, обычно также доступна как побочный продукт итерации по каталогу. Во время итерации по каталогу вызов exists ( * iterator ) менее эффективен, чем exists ( iterator - > status ( ) ) .

Пример

#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);
}

Вывод:

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

Смотрите также

(C++17) (C++17)
определяет атрибуты файла
определяет атрибуты файла, проверяя цель символьной ссылки
(функция)
представляет тип файла и права доступа
(класс)
проверяет, ссылается ли запись каталога на существующий объект файловой системы
(публичная функция-член std::filesystem::directory_entry )