std::filesystem::exists
Defined in header <filesystem> |
||
|---|---|---|
bool exists( std::filesystem::file_status s ) noexcept; |
(1) | (since C++17) |
bool exists( const std::filesystem::path& p ); |
(2) | (since C++17) |
bool exists( const std::filesystem::path& p, std::error_code& ec ) noexcept; |
(3) | (since C++17) |
Проверяет, соответствует ли заданный статус файла или путь существующему файлу или каталогу.
status_known(s) && s.type() != file_type::not_found. 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, если выделение памяти завершается неудачно.
std::filesystem::filesystem_error при ошибках в подлежащих системных API, сконструированном с p в качестве первого аргумента пути и кодом ошибки ОС как аргументом кода ошибки.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) |
определяет атрибуты файла определяет атрибуты файла, проверяя целевой объект символической ссылки (функция) |
|
(C++17) |
представляет тип файла и разрешения (класс) |
| проверяет, ссылается ли запись каталога на существующий объект файловой системы (публичный член-функция std::filesystem::directory_entry) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/filesystem/exists