2013-03-15 4 views
5

При использовании boost_filesystem Boost продолжает добавлять кавычки к именам файлов.boost :: файловая система добавляет кавычки?

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; 
} 

Составитель:

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

Выход:

./foo 
"./foo" 
"foo" 

Это несколько неожиданно, и неудобный в моем случае. Действительно ли это намеренно, или это несколько более старая версия Boost (1.46.1) багги в этом отношении? Есть ли способ избежать их добавления?

Я просмотрел документацию, но помимо уроков не, показывая эти кавычки в их примере вывода, я не был просветленным.

ответ

6

Это фактически bug подал на НЧ на версию 1.47.0.

Предлагаемое временное решение:

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

Это намеренно, потому что неожиданные встроенные пространства и путать связанный код. Лучшее, что вы можете сделать, это вероятно:

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

EDIT

Хотя, по словам this link, вы можете попробовать что-то вроде:

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

Ну, если я боюсь, вложенных пространств Я хорошо КАВЫЧКИ себя. При необходимости * удалить * их, прежде чем я смогу использовать имя файла в выходном файле журнала, это неприятность, хотя - и 'replace_all()' на самом деле не помогает, потому что, как бы то ни было, мозг мертв, может быть встроенная отметка кавычки * в имени файла. ;-) – DevSolar

+0

Хорошо, но вы можете сделать то, что предлагает отчет об ошибке: std :: cout << p.filename(). String() << std :: endl; –

+0

Готово, проверено и зачислено, прежде чем я даже поддержал/ответил здесь. ;-) – DevSolar