【问题标题】:boost::filesystem adding quotation marks?boost::filesystem 添加引号?
【发布时间】:2013-03-15 07:32:26
【问题描述】:

当使用 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) 版本在这方面有点老旧?有什么方法可以避免它们被添加吗?

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

【问题讨论】:

    标签: c++ boost boost-filesystem


    【解决方案1】:

    这实际上是在 1.47.0 版本的 Boost 框架上提交的bug

    建议的解决方法是:

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

    【讨论】:

      【解决方案2】:

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

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

      编辑

      虽然,根据this link,您可以尝试类似:

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

      【讨论】:

      • 好吧,如果我害怕嵌入空格,我可以自己添加引号。在我可以在日志输出中使用文件名之前必须删除它们是一件令人讨厌的事情 - 并且replace_all() 并没有真正帮助,因为它可能是脑死亡,可能有一个嵌入引号也在文件名中。 ;-)
      • 好的,但是你可以按照错误报告的建议去做:std::cout
      • 在我在这里投票/回答之前完成、测试和提交。 ;-)
      猜你喜欢
      • 2016-06-02
      • 2011-01-24
      • 2016-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 1970-01-01
      相关资源
      最近更新 更多