2013-03-15 12 views
5

Podczas używania boost_filesystem, Boost ciągle dodaje cudzysłowy do nazw plików.boost :: system plików dodający cudzysłowy?

foo.cpp:

#include <iostream> 
#include <boost/filesystem.hpp> 

int main(int argc, char * argv[]) 
{ 
    std::cout << argv[0] << std::endl; 
    boost::filesystem::path p(argv[0]); 
    std::cout << p << std::endl; 
    std::cout << p.filename() << std::endl; 
    return 0; 
} 

Opracowanie:

g++ foo.cpp -o foo -lboost_filesystem -lboost_system 

wyjściowa:

./foo 
"./foo" 
"foo" 

Jest to nieco nieoczekiwane i niewygodne w moim przypadku. Czy to naprawdę celowe, czy może moja starsza wersja Boost (1.46.1) jest pod tym względem błędna? Czy jest jakiś sposób uniknięcia ich dodania?

Przeanalizowałem dokumentację, ale poza samouczkami nie pokazującymi te cudzysłowy w ich przykładowym wyniku, nie byłem oświecony.

Odpowiedz

6

To jest rzeczywiście bug złożonym Boost framework w wersji 1.47.0.

Proponowana obejście jest:

std::cout << path("/foo/bar.txt").filename().string() 
4

Jest to celowe, ponieważ nieoczekiwane zagnieżdżone spacje i pomieszanie związanego kodu. Najlepsze co możesz zrobić, to prawdopodobnie:

boost::replace_all(yourquotedstring, "\"", ""); 

EDIT

Chociaż, zgodnie z this link, można spróbować coś takiego:

std::cout << path("/foo/bar.txt").filename().string(); 
+0

Dobrze, jeśli boję spacjami Mogę również dodać cytuje siebie. Konieczność * usunięcia * ich *, zanim będę mogła użyć nazwy pliku w wynikach logu, jest uciążliwa - a 'replace_all()' nie pomaga, ponieważ może być martwy, może być osadzony * cudzysłów * również w nazwie pliku. ;-) – DevSolar

+0

OK, ale możesz zrobić to, co sugeruje raport o błędzie: std :: cout << p.filename(). String() << std :: endl; –

+0

Zrobione, przetestowane i zatwierdzone, zanim jeszcze wznowiłem/odpowiedziałem tutaj. ;-) – DevSolar

Powiązane problemy