名前空間
変種
操作

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)

パス p1p2 が同じファイルまたはディレクトリを参照しており、status によって決定されるファイルステータスが同じであるかどうかをチェックします(シンボリックリンクはたどられます)。

p1 または p2 が存在しない場合、またはそれらのファイルタイプが(is_other によって決定される)ファイル、ディレクトリ、またはシンボリックリンクでない場合、エラーが報告されます。

例外を投げないオーバーロードは、エラーが発生した場合に false を返します。

目次

[編集] パラメータ

p1, p2 - 等価性をチェックするパス
エラーコード - 例外を投げないオーバーロードでのエラー報告のための出力パラメータ

[編集] 戻り値

true p1p2 が同じファイルまたはディレクトリを参照しており、それらのファイルステータスが同じである場合。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_devst_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"

[編集] 関連項目

ファイルの属性を決定する
シンボリックリンクのターゲットを確認してファイルの属性を決定する
(関数) [編集]
English 日本語 中文(简体) 中文(繁體)