boost::filesystem v3 - правильный регистр пути

Привет Есть ли эффективный способ исправить случай данного пути Windows?

fs::path dir("c:/winDOWS"); --> C:/Windows?

(без Windows-API!)


person DrFroid    schedule 15.03.2011    source источник
comment
Вы имеете в виду не использовать windows-api даже в Windows, или вы имеете в виду использование какой-то абстрагирующей библиотеки, чтобы код работал без изменений на других платформах?   -  person gnud    schedule 16.03.2011


Ответы (2)


Без Windows API невозможно узнать, что это правильный регистр. Обычные файловые системы Windows нечувствительны к регистру и сохраняют регистр.

Windows API позволяет сделать это GetFullPathName

person John Knoeller    schedule 15.03.2011
comment
Я не могу согласиться. Точно знаю, что я использую итератор каталога boost и выполняю сравнение без учета регистра, чтобы проверить, является ли это одним и тем же путем ... исходный код также работает в Linux, и я не вижу никаких причин использовать win API для этой цели. . - person DrFroid; 15.03.2011
comment
Boost.Filesystem также использует Windows API, он только обертывает его, и если для определенной функции нет обертки, вы должны использовать эту функцию напрямую. - person Philipp; 15.03.2011
comment
Согласно связанной документации: ... Эта функция не проверяет правильность результирующего пути и имени файла или то, что они видят существующий файл на связанном томе .... Таким образом, GetFullPathName НЕ является правильным ответом! Сам запутался, поэтому решил сообщить другим, что текущий главный ответ неверен. - person zzz; 29.07.2016

Поскольку я пришел сюда в поисках того же самого, я решил, что избавлю других от Google.

Ответ можно найти в этом потоке stackoverflow.

К сожалению, это не то, как сделать это с помощью boost, а не с помощью Windows API. Но, по крайней мере, он работает, чего не делает упомянутый выше API.

person Michael Medin    schedule 24.07.2014