5

使用 boost_filesystem 时,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) 版本有点旧?有什么方法可以避免它们被添加吗?

我仔细阅读了文档,但除了教程没有在其示例输出中显示这些引号之外,我并没有受到启发。

4

2 回答 2

6

这实际上是1.47.0 版本的 Boost 框架上的一个错误。

建议的解决方法是:

std::cout << path("/foo/bar.txt").filename().string()
于 2013-03-15T07:43:41.110 回答
4

这是故意的,因为意外的嵌入空间和混淆相关代码。你能做的最好的可能是:

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

编辑

尽管根据此链接,您可以尝试以下操作:

std::cout << path("/foo/bar.txt").filename().string(); 
于 2013-03-15T07:38:41.060 回答