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

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

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

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

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

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

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

(нашел здесь)

Я пробовал:

string result1 = string& (myPath);

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

5 ответов


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


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

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

П. С. - Я был программирования с стимул для возраста и я не мог легко найти эту информацию в документации.


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

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

но обратите внимание, что с C++17 есть std:: filesystem С канонический и многое другое.


это работало в 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...      
}

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


этого

path.c_str();

вы должны быть хорошо.