首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

std::filesystem::equivalent

Defined in header <filesystem>

bool equivalent( const std::filesystem::path& p1, const std::filesystem::path& p2 ); bool equivalent( const std::filesystem::path& p1, const std::filesystem::path& p2, std::error_code& ec );

(1)

(since C++17)

检查路径p1p2引用相同的文件或目录,并具有与status%28符号链接跟随%29。

如果两者都没有p1也不p2存在,或者如果两者都存在,但文件、目录或符号链接%28不存在。is_other%29,报告了一个错误。

非抛出重载返回。false关于错误。

参数

p1, p2

-

paths to check for equivalence

ec

-

out-parameter for error reporting in the non-throwing overload

返回值

true如果p1p2引用同一个文件或目录,它们的文件状态是相同的。false否则。

例外

不占用std::error_code&参数抛文件系统[医]误差关于基础OS API错误,使用p1作为第一个论点,p2作为第二个参数,操作系统错误代码作为错误代码参数。std::bad_alloc如果内存分配失败,则可能引发。过载std::error_code&参数,如果OSAPI调用失败,则将其设置为OSAPI错误代码,并执行ec.clear()如果没有错误发生。这个过载

noexcept规格:

noexcept

注记

如果有以下情况,则考虑使用两条路径解析到同一个文件系统实体。st_devst_ino他们的POSIX统计结构,犹如由POSIX取得统计是平等的。%28意味着,文件位于同一设备上的同一位置%29。

特别是,同一文件或目录的所有硬链接都是等效的,而符号链接及其在同一文件系统上的目标是等效的。

二次

代码语言:javascript
复制
#include <iostream>
#include <cstdint>
#include <filesystem>
namespace fs = std::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';
}

二次

可能的产出:

二次

代码语言:javascript
复制
"." is equivalent to "/var/tmp/test"
"/lib/libc.so.6" is equivalent to "/lib/libc-2.12.so"

二次

另见

statussymlink_status (C++17)(C++17)

determines file attributesdetermines file attributes, checking the symlink target (function)

代码语言:txt
复制
 © cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

扫码关注腾讯云开发者

领取腾讯云代金券