Как преобразовать тип ускоренного пути в строку?

Здравствуйте, у меня есть программа, которая получает полный путь к расположению файла и помещается в переменную, которая является типом: boost:: filesystem2:: path

Я посмотрел, как это сделать, и нашел, что используя:

string result1 = boost::filesystem::basename (myPath)

преобразует путь в строку, но только преобразует имя файла (например, если путь "C:\name\bobsAwesomeWordDoc.docx", он просто возвращает "bobsAwesomeWordDoc" ).

Я нашел следующее о том, как преобразовать весь путь в строку, но я не знаю, как реализовать его в своей программе. Я пробовал несколько способов, но получаю ошибки преобразования.

const std::string & string(): эта процедура возвращает копию строки, с которой был инициализирован путь, с форматированием в соответствии с правилами грамматики пути.

(найдено здесь)

Я пробовал:

string result1 = string& (myPath);

и несколько других вариантов.

Ответ 1

Вам просто нужно позвонить myPath.string().

Ответ 2

Я считаю, что вам нужно сделать немного больше, чем просто преобразовать путь к строке - сначала вы должны получить каноническую версию пути - абсолютный путь без элементов символической ссылки - и преобразовать это в строку:

boost::filesystem::canonical(myPath).string();

P.S. - Я программировал с Boost целую вечность, и я не мог легко найти эту информацию в документах.


Обновление (октябрь 2017)

Документация: boost:: filesystem:: canonical.

Но обратите внимание, что с С++ 17 есть std:: файловая система, с canonical и многое другое.

Ответ 3

Это работало в wxWidgets: (Я знаю, что я должен просто использовать утилиты wx но это тест)

void WxWidgetsBoostTestFrame::OnTestBtnClick(wxCommandEvent& event)
{
    boost::filesystem::path currentPath;
    currentPath = boost::filesystem::current_path();
    std::string curDirString;
    curDirString = boost::filesystem::canonical(currentPath).string();
    wxString mystring(curDirString.c_str(), wxConvUTF8);
    wxMessageBox(mystring); // output:  C:/Users\client\Desktop...      
}

Ответ 4

Вызов myPath.generic_string() сделает то, что вам нужно.