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 - 发生错误时需修改的错误代码

返回值

p 指示的路径指向空文件或目录则为 true ,否则为 false 。非抛出重载在出现错误时返回 false

异常

任何未标记为 noexcept 的重载在内存分配失败时都可能抛出 std::bad_alloc

1) 当底层操作系统 API 出错时抛出 std::filesystem::filesystem_error ,该异常以 p 作为第一个路径参数,以操作系统错误代码作为错误码参数构造。
2) 若操作系统API调用失败,将 std:: error_code & 参数设置为操作系统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++标准。

缺陷报告 适用范围 发布时行为 正确行为
LWG 3013 C++17 error_code 重载标记为 noexcept 但可能分配内存 移除 noexcept

参见

(C++17) (C++17)
确定文件属性
确定文件属性,检查符号链接目标
(函数)
(C++17)
检查路径是否指向存在的文件系统对象
(函数)