Ответ 1
Вам просто нужно позвонить myPath.string()
.
Здравствуйте, у меня есть программа, которая получает полный путь к расположению файла и помещается в переменную, которая является типом: boost:: filesystem2:: path
Я посмотрел, как это сделать, и нашел, что используя:
string result1 = boost::filesystem::basename (myPath)
преобразует путь в строку, но только преобразует имя файла (например, если путь "C:\name\bobsAwesomeWordDoc.docx", он просто возвращает "bobsAwesomeWordDoc" ).
Я нашел следующее о том, как преобразовать весь путь в строку, но я не знаю, как реализовать его в своей программе. Я пробовал несколько способов, но получаю ошибки преобразования.
const std::string & string(): эта процедура возвращает копию строки, с которой был инициализирован путь, с форматированием в соответствии с правилами грамматики пути.
(найдено здесь)
Я пробовал:
string result1 = string& (myPath);
и несколько других вариантов.
Вам просто нужно позвонить myPath.string()
.
Я считаю, что вам нужно сделать немного больше, чем просто преобразовать путь к строке - сначала вы должны получить каноническую версию пути - абсолютный путь без элементов символической ссылки - и преобразовать это в строку:
boost::filesystem::canonical(myPath).string();
P.S. - Я программировал с Boost целую вечность, и я не мог легко найти эту информацию в документах.
Обновление (октябрь 2017)
Документация: boost:: filesystem:: canonical.
Но обратите внимание, что с С++ 17 есть std:: файловая система, с canonical и многое другое.
Это работало в 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()
сделает то, что вам нужно.