std::experimental::filesystem::equivalent
From cppreference.com
< cpp | experimental | fs
| ヘッダー <experimental/filesystem> で定義されています |
||
| bool equivalent( const path& p1, const path& p2 ); bool equivalent( const path& p1, const path& p2, error_code& ec ); |
(1) | (filesystem TS) |
パス p1 と p2 が同じファイルまたはディレクトリを参照しており、status によって決定されるファイルステータスが同じであるかどうかをチェックします(シンボリックリンクはたどられます)。
p1 または p2 が存在しない場合、またはそれらのファイルタイプが(is_other によって決定される)ファイル、ディレクトリ、またはシンボリックリンクでない場合、エラーが報告されます。
例外を投げないオーバーロードは、エラーが発生した場合に false を返します。
目次 |
[編集] パラメータ
| p1, p2 | - | 等価性をチェックするパス |
| エラーコード | - | 例外を投げないオーバーロードでのエラー報告のための出力パラメータ |
[編集] 戻り値
true p1 と p2 が同じファイルまたはディレクトリを参照しており、それらのファイルステータスが同じである場合。false それ以外の場合。
[編集] 例外
error_code& パラメータを取らないオーバーロードは、基盤となる OS API エラーが発生した場合に filesystem_error をスローします。この例外は、最初の引数として p1、2番目の引数として p2、エラーコード引数として OS エラーコードを指定して構築されます。std::bad_alloc は、メモリ割り当てに失敗した場合にスローされる可能性があります。error_code& パラメータを取るオーバーロードは、OS API の呼び出しが失敗した場合にそれを OS API エラーコードに設定し、エラーが発生しなかった場合は ec.clear() を実行します。このオーバーロードはnoexcept 指定:
noexcept
[編集] 注記
2つのパスは、それらの POSIX stat 構造体の st_dev と st_ino が等しい場合(すなわち、ファイルが同じデバイスの同じ場所に存在する場合)に、同じファイルシステムエンティティを参照すると見なされます。これは、POSIX stat を呼び出したかのように取得されます。
特に、同じファイルまたはディレクトリのすべてのハードリンクは等価であり、同じファイルシステム上のシンボリックリンクとそのターゲットは等価です。
[編集] 例
このコードを実行
#include <cstdint> #include <experimental/filesystem> #include <iostream> namespace fs = std::experimental::filesystem; int main() { // hard link equivalency fs::path p1 = "."; fs::path p2 = fs::current_path(); if (fs::equivalent(p1, p2)) std::cout << p1 << " is equivalent to " << p2 << '\n'; // symlink equivalency fs::path p3 = "/lib/libc.so.6"; fs::path p4 = p3.parent_path() / fs::read_symlink(p3); if (fs::equivalent(p3, p4)) std::cout << p3 << " is equivalent to " << p4 << '\n'; }
実行結果の例
"." is equivalent to "/var/tmp/test" "/lib/libc.so.6" is equivalent to "/lib/libc-2.12.so"
[編集] 関連項目
| ファイルの属性を決定する シンボリックリンクのターゲットを確認してファイルの属性を決定する (関数) |