std::experimental::filesystem::canonical
來自 cppreference.com
< cpp | experimental | fs
定義於標頭檔案 <experimental/filesystem> |
||
path canonical( const path& p, const path& base = current_path() ); |
(1) | (檔案系統 TS) |
path canonical( const path& p, error_code& ec ); |
(2) | (檔案系統 TS) |
path canonical( const path& p, const path& base, error_code& ec ); |
(3) | (檔案系統 TS) |
將路徑 p 轉換為規範的絕對路徑,即沒有點、點點元素或符號連結的絕對路徑。
如果 p 不是絕對路徑,則該函式的行為如同它首先透過 absolute(p, base) 或 absolute(p)(對於 (2))轉換為絕對路徑。
路徑 p 必須存在。
目錄 |
[編輯] 引數
p | - | 一個路徑,可以是絕對路徑,也可以是相對於 base 的相對路徑,並且它必須是一個存在的路徑 |
base | - | 當 p 是相對路徑時使用的基路徑 |
ec | - | 用於儲存錯誤狀態的錯誤程式碼 |
[編輯] 返回值
一個解析到與 absolute(p, base)(或 absolute(p) 對於 (2))相同檔案的絕對路徑。
[編輯] 異常
不帶 error_code& 引數的過載在底層作業系統 API 錯誤時丟擲 filesystem_error,該錯誤使用 p 作為第一個引數,base 作為第二個引數,以及作業系統錯誤程式碼作為錯誤程式碼引數構造。如果記憶體分配失敗,可能會丟擲 std::bad_alloc。帶 error_code& 引數的過載在作業系統 API 呼叫失敗時將其設定為作業系統 API 錯誤程式碼,如果沒有發生錯誤,則執行 ec.clear()。此過載具有noexcept 規範:
noexcept
此函式模仿 POSIX realpath。
[編輯] 示例
執行此程式碼
#include <experimental/filesystem> #include <iostream> namespace fs = std::experimental::filesystem; int main() { fs::path p = fs::path("..") / ".." / "AppData"; std::cout << "Current path is " << fs::current_path() << '\n' << "Canonical path for " << p << " is " << fs::canonical(p) << '\n'; }
可能的輸出
Current path is "C:\Users\abcdef\AppData\Local\Temp" Canonical path for "..\..\AppData" is "C:\Users\abcdef\AppData"
[編輯] 另請參閱
表示一個路徑 (類) | |
組成一個絕對路徑 將路徑轉換為絕對路徑,複製作業系統特定行為 (函式) |