std::experimental::filesystem::equivalent
來自 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) | (檔案系統 TS) |
檢查路徑 p1 和 p2 是否指向相同的檔案或目錄,並且具有與 status 所確定的相同檔案狀態(符號連結將被跟隨)。
如果 p1 或 p2 不存在,或者它們的檔案型別不是檔案、目錄或符號連結(由 is_other 確定),則報告錯誤。
非丟擲過載在錯誤時返回 false。
目錄 |
[編輯] 引數
p1, p2 | - | 要檢查等效性的路徑 |
ec | - | 非丟擲過載中用於錯誤報告的出參 |
[編輯] 返回值
如果 p1 和 p2 指向相同的檔案或目錄且檔案狀態相同,則返回 true。否則返回 false。
[編輯] 異常
不帶 error_code& 引數的過載在底層作業系統 API 錯誤時丟擲 filesystem_error,構造時將 p1 作為第一個引數,p2 作為第二個引數,並將作業系統錯誤碼作為錯誤碼引數。std::bad_alloc 可能在記憶體分配失敗時丟擲。帶 error_code& 引數的過載在作業系統 API 呼叫失敗時將其設定為作業系統 API 錯誤碼,並在沒有錯誤發生時執行 ec.clear()。此過載具有noexcept 規範:
noexcept
[編輯] 注意
如果兩個路徑的 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"
[編輯] 另請參閱
確定檔案屬性 確定檔案屬性,檢查符號連結目標 (函式) |