boost::filesystem 添加引号?

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)在这方面有漏洞?有没有什么办法可以避免它们被添加?

我查阅了文档,但除了教程中的示例输出显示那些引号外,我并没有得到启发。

2个回答

6

这实际上是针对 Boost 框架版本 1.47.0 提出的一个错误

建议的解决方法是:

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

4

这是有意的,因为意外嵌入的空格可能会混淆相关代码。你最好的做法可能是:

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

编辑

根据该链接的说明,您可以尝试以下操作:

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

如果我害怕嵌入式空格,我可以自己添加引号。但是,在将文件名用于日志输出之前必须删除它们,这很麻烦 - replace_all()并不能真正帮助,因为可能会在文件名中嵌入引号,尽管它可能很愚蠢。;-) - DevSolar
好的,但你可以按照错误报告建议的方式进行操作:std::cout << p.filename().string() << std::endl; - Roger Rowland
在我甚至点赞/回答之前,已经完成、测试并提交了。;-) - DevSolar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接