Namespaces
Variants

std::experimental::filesystem:: equivalent

From cppreference.net
定義先ヘッダ <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 - 等価性をチェックするパス
ec - 非スローオーバーロードでのエラー報告用出力パラメータ

戻り値

true p1 p2 が同じファイルまたはディレクトリを参照し、それらのファイルステータスが同じ場合。 false それ以外の場合。

例外

The overload that does not take an error_code & parameter throws filesystem_error on underlying OS API errors, constructed with p1 as the first argument, p2 as the second argument, and the OS error code as the error code argument. std:: bad_alloc may be thrown if memory allocation fails. The overload taking an error_code & parameter sets it to the OS API error code if an OS API call fails, and executes ec. clear ( ) if no errors occur. This overload has
noexcept 仕様:
noexcept

注記

2つのパスが同じファイルシステムエンティティに解決されると見なされるのは、POSIX stat structure から取得される st_dev st_ino が等しい場合です(つまり、ファイルが同じデバイス上の同じ場所に存在することを意味します)。これはPOSIX stat によって取得されたかのようにして判断されます。

特に、同じファイルまたはディレクトリに対するすべてのハードリンクは等価であり、同じファイルシステム上のシンボリックリンクとそのターゲットは等価です。

#include <cstdint>
#include <experimental/filesystem>
#include <iostream>
namespace fs = std::experimental::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';
    // シンボリックリンクの等価性チェック
    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"

関連項目

ファイル属性を決定する
シンボリックリンクのターゲットをチェックしてファイル属性を決定する
(function)