std::filesystem::exists
Определено в заголовочном файле <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) |
Проверяет, соответствует ли заданный статус файла или путь существующему файлу или каталогу.
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& код ошибки ОС, а при отсутствии ошибок выполняет 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/cpp/filesystem/exists