std::filesystem:: equivalent
|
ヘッダーで定義
<filesystem>
|
||
|
bool
equivalent
(
const
std::
filesystem
::
path
&
p1,
const std:: filesystem :: path & p2 ) ; |
(1) | (C++17以降) |
|
bool
equivalent
(
const
std::
filesystem
::
path
&
p1,
const
std::
filesystem
::
path
&
p2,
|
(2) | (C++17以降) |
パス p1 と p2 が同一のファイルシステムエンティティに解決されるかどうかをチェックします。
p1 または p2 のいずれかが存在しない場合、エラーが報告されます。
例外を送出しないオーバーロードは、エラー時に false を返します。
目次 |
パラメータ
| p1, p2 | - | 等価性をチェックするパス |
| ec | - | 非スローオーバーロードでのエラー報告用出力パラメータ |
戻り値
true
p1とp2が同じファイルまたはディレクトリを参照し、それらのファイルステータスが同じ場合。
false
それ以外の場合。
例外
noexcept でマークされていないオーバーロードは、
メモリ確保に失敗した場合
std::bad_alloc
をスローする可能性があります。
注記
2つのパスが同じファイルシステムエンティティに解決されると見なされるのは、それらのパスが解決する候補エンティティが同じデバイス上の同じ場所に存在する場合です。POSIXでは、これは
st_dev
と
st_ino
のメンバーが、POSIXの
stat
構造体
(POSIXの
stat()
によって取得されたものと仮定して)において等しいことを意味します。
特に、同じファイルまたはディレクトリに対するすべてのハードリンクは等価であり、同じファイルシステム上のシンボリックリンクとそのターゲットは等価です。
例
#include <cstdint> #include <filesystem> #include <iostream> namespace fs = std::filesystem; int main() { // ハードリンクの等価性 fs::path p1 = "."; fs::path p2 = fs::current_path(); if (fs::equivalent(p1, p2)) std::cout << p1 << " is equivalent to " << p2 << '\n'; // シンボリックリンクの等価性 for (const fs::path lib : {"/lib/libc.so.6", "/lib/x86_64-linux-gnu/libc.so.6"}) { try { p2 = lib.parent_path() / fs::read_symlink(lib); } catch (std::filesystem::filesystem_error const& ex) { std::cout << ex.what() << '\n'; continue; } if (fs::equivalent(lib, p2)) std::cout << lib << " is equivalent to " << p2 << '\n'; } }
出力例:
"." is equivalent to "/var/tmp/test" filesystem error: read_symlink: No such file or directory [/lib/libc.so.6] "/lib/x86_64-linux-gnu/libc.so.6" is equivalent to "/lib/x86_64-linux-gnu/libc-2.23.so"
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 2937 | C++17 | エラー条件が誤って指定されていた | 修正済み |
関連項目
|
2つのパスの字句表現を辞書順で比較する
(
std::filesystem::path
の公開メンバ関数)
|
|
|
(C++17)
(C++17)
(until C++20)
(C++17)
(until C++20)
(C++17)
(until C++20)
(C++17)
(until C++20)
(C++17)
(until C++20)
(C++20)
|
2つのパスを辞書順で比較する
(関数) |
|
(C++17)
(C++17)
|
ファイル属性を判定する
シンボリックリンクのターゲットをチェックしてファイル属性を判定する (関数) |