Namespaces
Variants

std::experimental::filesystem:: absolute, std::experimental::filesystem:: system_complete

From cppreference.net
Определено в заголовочном файле <experimental/filesystem>
path absolute ( const path & p, const path & base = current_path ( ) ) ;
(1) (filesystem TS)
path system_complete ( const path & p ) ;
path system_complete ( const path & p, error_code & ec ) ;
(2) (filesystem TS)
1) Возвращает абсолютный путь p относительно base согласно следующим правилам:
  • Если p имеет как имя корня, так и корневую директорию (например, "C:\users" ), то путь возвращается без изменений.
  • Если p имеет имя корня, не сопровождаемое корневой директорией (например, "C:text.txt" ), то base вставляется между именем корня p и остальной частью p . Формально возвращается p. root_name ( ) / fs :: absolute ( base ) . root_directory ( ) / fs :: absolute ( base ) . relative_path ( ) / p. relative_path ( ) .
  • Если p не имеет имени корня, но имеет корневую директорию (например, "/var/tmp/file.txt" в POSIX-системе или "\users \A BC\Document.doc" в Windows), то имя корня base (если оно есть) добавляется к p (в POSIX-системе p не изменяется, в Windows "\users \A BC\Document.doc" становится "C:\users \A BC\Document.doc" ). Формально возвращается fs :: absolute ( base ) . root_name ( ) / p .
  • Если p не имеет ни имени корня, ни корневой директории (например, "../file.txt" ), то весь base добавляется к p . Формально возвращается absolute ( base ) / p .
2) Получает абсолютный путь, идентифицирующий файл, к которому обратился бы API открытия файлов ОС при заданном пути p . В POSIX-системах это эквивалентно (1) со значением base по умолчанию ( fs::current_path() ). В системах Windows каждый логический диск имеет свою текущую рабочую директорию, поэтому если p не является абсолютным и содержит компонент имени корневого каталога (например, "E:filename.txt" ), используется текущая рабочая директория этого диска, которая могла быть установлена ранее выполнением другой программы.

Содержание

Параметры

p - путь для преобразования в абсолютную форму
base - путь (не обязательно абсолютный), используемый в качестве начального местоположения
ec - выходной параметр для сообщения об ошибках в непорождающей перегрузке

Возвращаемое значение

Возвращает абсолютный (хотя не обязательно канонический) путь, сформированный путем комбинирования p и base как описано выше.

Исключения

The overload that does not take an error_code & parameter throws filesystem_error on underlying OS API errors, constructed with p as the first argument, base as the second argument, and the OS error code as the error code argument. std:: bad_alloc may be thrown if memory allocation fails. The overload taking an 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. This overload has
noexcept спецификация:
noexcept

Примечания

На системах, поддерживающих корневые имена (например, Windows), результат вызова absolute для относительного пути с корневым именем (например, "D:file.txt" ), когда корневое имя base отличается, обычно приводит к несуществующему пути.

Пример

#include <filesystem>
#include <iostream>
namespace fs = std::experimental::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'
	      << "System complete path for " << p << " is "
              << fs::system_complete(p) << '\n';
}

Возможный вывод:

Current path is "D:/local/ConsoleApplication1"
Absolute path for "C:cl.exe" is "C:/local/ConsoleApplication1/cl.exe"
System complete path for "C:cl.exe" is "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\cl.exe"

Смотрите также

формирует канонический путь
(функция)