std::experimental::filesystem::canonical
From cppreference.com
< cpp | experimental | fs
| ヘッダー <experimental/filesystem> で定義されています |
||
| path canonical( const path& p, const path& base = current_path() ); |
(1) | (filesystem TS) |
| path canonical( const path& p, error_code& ec ); |
(2) | (filesystem TS) |
| path canonical( const path& p, const path& base, error_code& ec ); |
(3) | (filesystem TS) |
p を、ドット、ドットドット要素、またはシンボリックリンクを持たない絶対パス(正規化された絶対パス)に変換します。
p が絶対パスでない場合、関数は absolute(p, base) または absolute(p) (2) によってまず絶対パスに変換されたかのように動作します。
p は存在しなければなりません。
目次 |
[編集] Parameters
| p | - | 絶対パスまたは base からの相対パスであり、存在するパスでなければならないパス |
| base | - | p が相対パスの場合に使用されるベースパス |
| エラーコード | - | エラー状態を格納するためのエラーコード。 |
[編集] Return value
absolute(p, base) (または absolute(p) for (2))と同じファイルに解決される絶対パス。
[編集] Exceptions
error_code& パラメータを取らないオーバーロードは、基盤となる OS API エラーが発生した場合に filesystem_error をスローします。これは、p を最初の引数、base を 2 番目の引数、OS エラーコードをエラーコード引数として構築されます。std::bad_alloc は、メモリ割り当てに失敗した場合にスローされる可能性があります。error_code& を取るオーバーロードは、OS API の呼び出しが失敗した場合にそれを OS API エラーコードに設定し、エラーが発生しなかった場合は ec.clear() を実行します。このオーバーロードはnoexcept 指定:
noexcept
この関数は、POSIX の realpath に基づいています。
[編集] Example
このコードを実行
#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"
[編集] See also
| パスを表現する (クラス) | |
| 絶対パスを構成する OS固有の動作を複製してパスを絶対パスに変換します (関数) |