Как преобразовать тип ускоренного пути в строку? - PullRequest
119 голосов
/ 14 ноября 2010

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

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

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

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

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

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

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

Я пытался:

string result1 = string& (myPath);

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

Ответы [ 5 ]

143 голосов
/ 14 ноября 2010

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

10 голосов
/ 07 июня 2012

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

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

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


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

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

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

3 голосов
/ 05 июля 2012

В wxWidgets это работало но это тест)

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...      
}
1 голос
/ 04 июля 2016

Звонок myPath.generic_string() сделает то, что вам нужно.

0 голосов
/ 04 июля 2018

Сделай это

path.c_str();

С тобой должно быть все в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...