std::filesystem::absolute
Defined in header <filesystem>
|
||
path absolute(const std::filesystem::path& p); path absolute(const std::filesystem::path& p, std::error_code& ec); |
(1) | (since C++17) |
Parameters
p | - | path to convert to absolute form |
ec | - | out-parameter for error reporting in the non-throwing overload |
Return value
Returns an absolute (although not necessarily canonical) pathname referencing the same file as p
Exceptions
The overload that does not take a std::error_code& parameter throws filesystem_error on underlying OS API errors, constructed with p
as the first argument and the OS error code as the error code argument. std::bad_alloc may be thrown if memory allocation fails. The overload taking a std::error_code& parameter sets it to the OS API error code if an OS API call fails, and executes ec.clear() if no errors occur.
Notes
It is not an error if absolute
results in a path that refers to a non-existent file. In particular, on systems that support root names (e.g. Windows), the result of calling absolute
on a relative path that has a root name (e.g. "D:file.txt" when the current working directory is on a different root name, will usually result in a non-existent path.
For POSIX-based operating systems, std::filesystem::absolute(p) is equivalent to std::filesystem::current_path() / p
For Windows, absolute
may be implemented as a call to GetFullPathNameW.
Example
#include <iostream> #include <filesystem> namespace fs = std::filesystem; int main() { fs::path p = "C:cl.exe"; std::cout << "Current path is " << fs::current_path() << '\n' << "Absolute path for " << p << " is " << fs::absolute(p) << '\n'; // actual location: "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\cl.exe" }
Possible output:
Current path is "D:/local/ConsoleApplication1" Absolute path for "C:cl.exe" is "C:/local/ConsoleApplication1/cl.exe"
See also
(C++17) |
composes a canonical path (function) |
(C++17) |
composes a relative path (function) |