Namespaces
Variants

std::experimental::filesystem:: exists

From cppreference.net
Определено в заголовке <experimental/filesystem>
bool exists ( file_status s )
(1) (filesystem TS)
bool exists ( const path & p ) ;
bool exists ( const path & p, error_code & ec )
(2) (filesystem TS)

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

1) Эквивалентно status_known ( s ) && s. type ( ) ! = file_type :: not_found .
2) Эквивалентно exists ( status ( p ) ) или exists ( status ( p, ec ) ) (символические ссылки отслеживаются). Нетормозящая перегрузка возвращает false при возникновении ошибки.

Содержание

Параметры

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

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

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

Исключения

1)
noexcept спецификация:
noexcept
2) Перегрузка, которая не принимает параметр error_code & , выбрасывает исключение filesystem_error при ошибках в базовом API ОС, создавая его с p в качестве первого аргумента и кодом ошибки ОС в качестве аргумента кода ошибки. std:: bad_alloc может быть выброшено при неудачном выделении памяти. Перегрузка, принимающая параметр error_code & , устанавливает его в код ошибки API ОС при сбое вызова API ОС и выполняет ec. clear ( ) при отсутствии ошибок. Данная перегрузка имеет
noexcept спецификацию:
noexcept

Примечания

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

Пример

#include <cstdint>
#include <experimental/filesystem>
#include <fstream>
#include <iostream>
namespace fs = std::experimental::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()
{
    fs::create_directory("sandbox");
    std::ofstream("sandbox/file"); // create regular file
    fs::create_symlink("non-existing", "sandbox/symlink");
    demo_exists("sandbox");
    for (auto it = fs::directory_iterator("sandbox"); it != fs::directory_iterator(); ++it)
        demo_exists(*it, it->status()); // use cached status from directory entry
    fs::remove_all("sandbox");
}

Вывод:

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

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

определяет атрибуты файла
определяет атрибуты файла, проверяя цель символьной ссылки
(функция)
представляет тип файла и права доступа
(класс)
кэшированный статус файла, обозначенного этой записью каталога
кэшированный symlink_status файла, обозначенного этой записью каталога
(публичная функция-член std::experimental::filesystem::directory_entry )