std::filesystem::is_empty
Определено в заголовке <filesystem> | ||
|---|---|---|
bool is_empty( const std::filesystem::path& p ); | (1) | (начиная с C++17) |
bool is_empty( const std::filesystem::path& p, std::error_code& ec ); | (2) | (начиная с C++17) |
Проверяет, указывает ли заданный путь на пустой файл или каталог.
Параметры
| p | - | путь для проверки |
| ec | - | код ошибки, который будет изменён в случае ошибки |
Возвращаемое значение
true, если путь, указанный p, указывает на пустой файл или каталог; в противном случае — false. Перегрузка без исключений возвращает false, если возникает ошибка.
Исключения
Любая перегрузка, не помеченная noexcept, может выбросить std::bad_alloc при сбое выделения памяти.
1) Выбрасывает
std::filesystem::filesystem_error при ошибках базового API ОС; исключение создаётся с p в качестве первого аргумента пути и с кодом ошибки ОС в качестве аргумента кода ошибки.
2) Устанавливает параметр
std::error_code& в код ошибки API ОС, если вызов API ОС завершается с ошибкой, и выполняет ec.clear(), если ошибок не возникает.Пример
#include <cstdio>
#include <filesystem>
#include <fstream>
#include <iostream>
int main()
{
namespace fs = std::filesystem;
const fs::path tmp_dir{fs::temp_directory_path()};
std::cout << std::boolalpha
<< "Temp dir: " << tmp_dir << '\n'
<< "is_empty(): " << fs::is_empty(tmp_dir) << '\n';
const fs::path tmp_name{tmp_dir / std::tmpnam(nullptr)};
std::cout << "Temp file: " << tmp_name << '\n';
std::ofstream file{tmp_name.string()};
std::cout << "is_empty(): " << fs::is_empty(tmp_name) << '\n';
file << "cppreference.com";
file.flush();
std::cout << "is_empty(): " << fs::is_empty(tmp_name) << '\n'
<< "file_size(): " << fs::file_size(tmp_name) << '\n';
file.close();
fs::remove(tmp_name);
}
Возможный вывод:
Temp dir: "/tmp" is_empty(): false Temp file: "/tmp/fileCqd9DM" is_empty(): true is_empty(): false file_size(): 16
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющих поведение, были ретроактивно применены к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение согласно опубликованной версии | Правильное поведение |
|---|---|---|---|
| LWG 3013 | C++17 |
error_code перегрузка помечена noexcept, но может выделять память | noexcept удалён |
См. также
|
(C++17)(C++17) | определяет атрибуты файла определяет атрибуты файла, проверяя цель символической ссылки (функция) |
|
(C++17) | проверяет, указывает ли путь на существующий объект файловой системы (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/filesystem/is_empty