Я хочу получить абсолютный канонический путь, учитывая относительный путь с файловой системой boost, который будет использоваться как в Windows, так и в Linux.Я хочу, чтобы это работало и для несуществующих путей.
Я использую слабый_каноник (путь относительный путь), доступный начиная с повышения 1.60, чтобы сделать это.Но он не работает должным образом (по крайней мере, в окнах).
При передаче относительного пути без родительских папок, то есть необработанного имени файла или имени папки, такого как "foo", слабый_канонический возвращает тот же нетронутый путь ("foo "в данном случае), тогда как absolute (pathlativePath) добавляет к нему текущий путь (как я и ожидал) (" current_dir / foo ").
Итак, наконец, я вынужден сначала вызвать абсолютный, а затемweakly_canonical, чтобы заставить его работать.
См. фрагмент с двумя случаями.
#include <string>
#include <iostream>
#include <boost/filesystem.hpp>
using boost::filesystem;
path relativePath("foo");
path canonical_path = weakly_canonical(relativePath);
path abs_canonical_path = weakly_canonical(absolute(relativePath));
std::cout << "Using weakly_canonical: "<<canonical_path.string()<<std::endl;
std::cout << "Using weakly_canonical and absolute: "<<abs_canonical_path.string()<<std::endl;
Например, если current_path равен "C: \ path \ to \ some \ folder", я получаю:
- lativePath = "./foo"
Использование слабо-канонического: C: \ path \ to \ some \ folder \ foo Использование слабо-канонического и абсолютного: C: \ path\ к \ некоторые \ папка \ Foo
lativePath = "../foo"
Использование слабо-канонического: C: \ path \ to \ some \ foo Использование слабо-канонического и абсолютного: C: \ path \ to \ some \ foo
lativePath = "foo"
Использование слабо-канонического: foo Использование слабо-канонического и абсолютного: C: \ path \ to \ some \ folder \ foo
Этот последний случай - то, что озадачиваетя, потому что я ожидаю, что weakly_canonical также добавит текущий рабочий каталог.
Правильно ли использовать абсолютное и слабо_каноническое вместе?Или я неправильно использую слабо-канонический?