Как преобразовать тип пути boost в строку?
привет в настоящее время у меня есть программа, которая получает полный путь к местоположению файла и помещается в переменную типа: boost::filesystem2::path
Я посмотрел, как это сделать, и нашел, что с помощью:
string result1 = boost::filesystem::basename (myPath)
преобразует путь в строку, но он преобразует только имя файла (например, если путь "C:namebobsAwesomeWordDoc - ... docx "он просто возвращает "bobsAwesomeWordDoc").
Я нашел следующее о том, как преобразовать всю путь к строке, но я не знаю как это реализовать в моей программе. Я пробовал несколько способов, но я получаю ошибки преобразования.
const std:: string& string (): эта процедура возвращает копию строки, с которой был инициализирован путь, с форматированием по правилам грамматики пути.
(нашел здесь)
Я пробовал:
string result1 = string& (myPath);
и несколько других вариаций.
5 ответов
Я считаю, что вам нужно сделать немного больше, чем просто преобразовать путь в строку - сначала вы должны получить каноническую версию пути - абсолютный путь без элементов символьной ссылки-и преобразовать это в строку:
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...
}