std::filesystem::canonical, std::filesystem::weakly_canonical
提供: cppreference.com
< cpp | filesystem
ヘッダ <filesystem> で定義
|
||
path canonical( const std::filesystem::path& p ); |
(1) | (C++17以上) |
path canonical( const std::filesystem::path& p, std::error_code& ec ); |
(2) | (C++17以上) |
path weakly_canonical(const std::filesystem::path& p); |
(3) | (C++17以上) |
path weakly_canonical(const std::filesystem::path& p, std::error_code& ec); |
(4) | (C++17以上) |
1-2) パス
p
を正規絶対パス、すなわち汎用形式表現でドット要素、ドット-ドット要素、シンボリックリンクを含まない絶対パスに変換します。 p
が絶対パスでなければ、最初に std::filesystem::absolute(p) によって絶対パスに変換されるかのように動作します。 パス p
は存在していなければなりません。3-4)
p
の存在する (status(p)
または status(p, ec)
によって判断されます) 先頭要素 (もしあれば) から構成されるパス引数を使用して canonical()
を呼んだ結果に、存在しない p
の要素 (もしあれば) が続いたものから、 operator/=
によって合成したパスを返します。 結果のパスは正規形になります。目次 |
[編集] 引数
p | - | 絶対パスまたは相対パス。 canonical の場合は存在するパスでなければなりません
|
ec | - | エラーを報告するための出力引数 |
[編集] 戻り値
1-2) std::filesystem::absolute(p) と同じファイルに解決される絶対パス。
3-4)
canonical(x)/y
を形成する正規パス。 ただし x は p の存在する最も長い先頭要素から構成されるパスで、 y は p の存在しない残りの後続要素から構成されるパスです。[編集] 例外
std::error_code& 引数を取らないオーバーロードは、ベースとなる OS の API でエラーが発生した場合、第1パス引数に p
、エラーコード引数に OS のエラーコードを指定して構築された filesystem_error を投げます。 std::error_code& 引数を取るオーバーロードは、 OS の API 呼び出しが失敗した場合、その引数を OS の API のエラーコードに設定し、エラーが発生しない場合は ec.clear() を実行します。 noexcept
指定のないあらゆるオーバーロードは、メモリ確保に失敗した場合 std::bad_alloc を投げる可能性があります。
[編集] ノート
関数 canonical()
は POSIX の realpath に倣ってモデル化されています。
関数 weakly_canonical()
は relative() の操作的意味論を簡素化するために導入されました。
[編集] 欠陥報告
以下の動作変更欠陥報告は以前に発行された C++ 標準に遡って適用されました。
DR | 適用先 | 発行時の動作 | 正しい動作 |
---|---|---|---|
LWG 2956 | C++17 | canonical has a spurious base parameter
|
removed |
[編集] 例
Run this code
#include <iostream> #include <filesystem> namespace fs = std::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"
[編集] 関連項目
(C++17) |
パスを表します (クラス) |
(C++17) |
絶対パスを組み立てます (関数) |
(C++17) |
相対パスを組み立てます (関数) |