std::filesystem:: is_empty
From cppreference.net
<
cpp
|
filesystem
|
定義先ヘッダ
<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)
|
パスが既存のファイルシステムオブジェクトを参照しているかチェックする
(関数) |