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) 基盤となるOS APIエラーが発生した場合 std::filesystem::filesystem_error をスローします。これは p を第一パス引数、OSエラーコードをエラーコード引数として構築されます。
2) OS API呼び出しが失敗した場合、 std:: error_code & パラメータにOS 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 適用対象 公開時の動作 正しい動作
LWG 3013 C++17 error_code オーバーロードがnoexceptとマークされているがメモリを割り当てる可能性がある noexceptが削除された

関連項目

(C++17) (C++17)
ファイル属性を決定する
シンボリックリンクのターゲットをチェックしてファイル属性を決定する
(関数)
(C++17)
パスが既存のファイルシステムオブジェクトを参照しているかチェックする
(関数)