std::filesystem::equivalent
STD::文件系统::等效
Defined in header | | |
---|---|---|
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) |
检查路径p1
和p2
引用相同的文件或目录,并具有与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
如果p1
和p2
引用同一个文件或目录,它们的文件状态是相同的。false
否则。
例外
不占用std::error_code
&
参数抛文件系统[医]误差关于基础OS API错误,使用p1
作为第一个论点,p2
作为第二个参数,操作系统错误代码作为错误代码参数。std::bad_alloc
如果内存分配失败,则可能引发。过载std::error_code
&
参数,如果OSAPI调用失败,则将其设置为OSAPI错误代码,并执行ec.clear()
如果没有错误发生。这个过载
noexcept
规格:
noexcept
注记
如果有以下情况,则考虑使用两条路径解析到同一个文件系统实体。st_dev
和st_ino
他们的POSIX统计结构,犹如由POSIX取得统计是平等的。%28意味着,文件位于同一设备上的同一位置%29。
特别是,同一文件或目录的所有硬链接都是等效的,而符号链接及其在同一文件系统上的目标是等效的。
例
二次
#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';
}
二次
可能的产出:
二次
"." 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) |
---|
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。