# std::filesystem::is_empty

< cpp‎ | filesystem

定义于头文件 `<filesystem>` |  |
bool is_empty( const std::filesystem::path& p ); bool is_empty( const std::filesystem::path& p, std::error_code& ec ); |  | (C++17 起)

检查给定路径是否指代一个空文件或目录。

### 参数

p | - | 要检验的路径
ec | - | 错误情况下修改的错误码

### 返回值

若 `p` 所指示的文件指代空文件或目录则为 true ，否则为 false 。不抛出重载在错误发生时返回 false 。

### 异常

不接受 std::error_code& 参数的重载在底层 OS API 错误时抛出 `filesystem_error` ，以第一 path 参数 `p` 和作为错误码参数的 OS 错误码构造。若 OS API 调用失败，则接受 std::error_code& 参数的重载设置该参数为 OS API 错误码，而若不出现错误则执行 ec.clear() 。若内存分配失败，则任何不标记为 `noexcept` 的重载可能抛出 std::bad_alloc 。

### 示例

    #include <filesystem>
    #include <fstream>
    #include <iostream>
    #include <cstdio>

    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

### 参阅

status symlink_status (C++17)(C++17) | 确定文件属性 确定文件属性，检查符号链接目标 (函数)
exists (C++17) | 检查路径是否指代既存的文件系统对象 (函数)