преобразовать путь к файлу из windows в linux и обратно, используя boost :: filesystem

Это я, или boost + filesystem :: path :: make_preferred не конвертирует «\» в «/»?

Дэвидан @ kempt: ~ / Documents / prog / work! $ ../practice/./path_info c: \ pitou foo / bar \ baa.txt
составной путь:
соиЬ << ————-: «c: pitou / foo / bar \ baa.txt»
make_preferred () ———-: «c: pitou / foo / bar \ baa.txt»

Я скорее надеялся на

C: \ pitou \ Foo \ бар \ baa.txt

на окнах и

/pitou/foo/bar/baa.txt

(или что-то близкое) на POSIX

источник здесь: boost :: файловая система учебник

2

Решение

Причина, по которой это не обрабатывается в Linux, хорошо объясняется здесь:

http://theboostcpplibraries.com/boost.filesystem-paths

Цитата:

Если пример 35.5 выполняется в Linux, возвращаемые значения
разные. Большинство функций-членов возвращают пустую строку, кроме
lative_path () и filename (), которые возвращают «C: \ Windows \ System». это
означает, что строка «C: \ Windows \ System» интерпретируется как файл
имя в Linux, что понятно, учитывая, что это не
переносимое кодирование пути или кодирование, зависящее от платформы,
Linux. Поэтому у Boost.Filesystem нет другого выбора, кроме как интерпретировать его
как имя файла.

2

Другие решения

Закончилось так:

string f = filename;
#       ifdef BOOST_POSIX_API   //workaround for user-input files
std::replace(f.begin(), f.end(), '\\', '/');
#       endif

Должна быть причина, почему это еще не решено …?

1