2013-03-15 33 views
5

Khi sử dụng boost_filesystem, Boost tiếp tục thêm dấu ngoặc kép vào tên tệp.boost :: filesystem thêm dấu ngoặc kép?

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

Biên soạn:

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

Output:

./foo 
"./foo" 
"foo" 

này hơi bất ngờ, và bất tiện trong trường hợp của tôi. Điều này thực sự có chủ ý, hoặc là phiên bản cũ hơn của tôi về Boost (1.46.1) lỗi trong khía cạnh này? Có cách nào tôi có thể tránh chúng được thêm vào không?

Tôi đã sử dụng tài liệu, nhưng ngoài các hướng dẫn không hiển thị các dấu ngoặc kép đó trong đầu ra ví dụ của chúng, tôi chưa chứng ngộ.

Trả lời

6

Đây thực sự là một bug nộp vào Boost khuôn khổ trên phiên bản 1.47.0.

Cách giải quyết đề xuất là:

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

Đó là chủ ý vì không gian được nhúng không mong muốn và mã gây nhầm lẫn có liên quan. Điều tốt nhất bạn có thể làm là lẽ:

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

EDIT

Mặc dù, theo this link, bạn có thể thử một cái gì đó như:

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

Vâng, nếu tôi sợ không gian nhúng tôi cũng có thể thêm dấu ngoặc kép bản thân mình. Có * loại bỏ * chúng trước khi tôi có thể sử dụng tên tập tin trong một bản ghi đầu ra là một phiền toái mặc dù - và 'replace_all()' không thực sự giúp đỡ bởi vì, não chết như nó có thể, có thể có một dấu ngoặc kép * nhúng * trong tên tệp là tốt. ;-) – DevSolar

+0

Ok, nhưng bạn có thể làm những gì báo cáo lỗi cho thấy: std :: cout << p.filename(). String() << std :: endl; –

+0

Hoàn thành, kiểm tra và cam kết trước khi tôi cập nhật/trả lời tại đây. ;-) – DevSolar

Các vấn đề liên quan