Здравствуйте, у меня сейчас есть программа, которая получает полный путь к местоположению файла и помещается в переменную типа: boost :: filesystem2 :: path
Я посмотрел, как это сделать, и обнаружил, что используя:
string result1 = boost::filesystem::basename (myPath)
преобразует путь в строку, НО преобразует только имя файла (например, если путь - «C: \ name \ bobsAwesomeWordDoc.docx», он просто возвращает «bobsAwesomeWordDoc»).
Я нашел следующее о том, как преобразовать весь путь в строку, но я не знаю, как реализовать это в моей программе. Я пробовал несколько способов, но получаю ошибки конвертации.
const std :: string & string (): эта процедура возвращает копию строки, которой был инициализирован путь, с форматированием в соответствии с правилами грамматики пути.
(найдено здесь )
Я пытался:
string result1 = string& (myPath);
и несколько других вариантов.
u8string()
, но это не помогает там, гдеstring()
используется автоматически.Я считаю , что вам нужно сделать немного больше , чем просто преобразовать путь в строку - вы должны сначала получить каноническую версию пути - абсолютный путь без каких - либо элементов символической линии связи - и новообращенный , что в строку:
PS - Я программировал с Boost целую вечность, и я не мог легко найти эту информацию в документации.
Обновление (октябрь 2017 г.)
Документация: boost :: filesystem :: canonical .
Но обратите внимание, что с C ++ 17 есть std :: filesystem с каноническим и многим другим.
источник
canonize
что устарело для вашей второй ссылки, ноcanonical
, похоже, не так (по вашей первой ссылке для 1_48 V3). Теперь в C ++ 17,std::filesystem
конечно, естьЭто сработало в wxWidgets: (я знаю, что мне нужно просто использовать утилиты wx, но это тест)
источник
Звонок
myPath.generic_string()
сделает то, что вам нужно.источник
Сделай это
path.c_str();
Все должно быть в порядке.
источник