Namespaces
Variants

std::filesystem:: is_empty

From cppreference.net
Определено в заголовочном файле <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.net";
    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 Applied to Behavior as published Correct behavior
LWG 3013 C++17 error_code overload marked noexcept but can allocate memory noexcept removed
Перевод текста на веб-странице на Русский:
DR Применяется к Поведение в опубликованной версии Корректное поведение
LWG 3013 C++17 error_code перегрузка помечена как noexcept, но может выделять память noexcept удален

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

(C++17) (C++17)
определяет атрибуты файла
определяет атрибуты файла, проверяя цель символьной ссылки
(функция)
(C++17)
проверяет, ссылается ли путь на существующий объект файловой системы
(функция)