【问题标题】:How can I format the boost path object without quotes?如何格式化不带引号的提升路径对象?
【发布时间】:2012-02-14 06:27:50
【问题描述】:

这是我的代码:

fs::path datadir = ...;
std::string dataDirOption((boost::format("--datadir=%1%") % datadir).str());

对于datadir=="c:/db",我得到dataDirOption=="--datadir=\"c:/db\"",而不是"--datadir=c:/db"

是否可以告诉boost::filesystem::path 在格式化时跳过引号?

现在,我知道我可以用 datadir.string() 替换 datadir 并以这种方式去掉引号,但我想知道是否可以在没有额外字符串的情况下这样做。

谢谢。

【问题讨论】:

  • 我认为 Boost 只是为了安全起见,以防万一。路径中的空格。
  • 我明白,但我正在为 mysqld 数据库引擎编写命令行,它真的不喜欢额外的引号。

标签: c++ boost path


【解决方案1】:

我建议另一种选择:后期处理。

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

这样您可以轻松切换到另一个引号字符,例如'

【讨论】:

    【解决方案2】:

    The % operator for format uses the << stream-insertion operator for user-defined typesthe documentation tells us 实际上是 path 的以下内容:

    os << boost::io::quoted(p.string<std::basic_string<Char>>(), static_cast<Char>('&'));
    

    要省略引号,您需要向format 对象传递一些不同的内容,例如您已经发现的string 方法的输出。

    【讨论】:

      【解决方案3】:

      不,不是,是 boost 框架版本 1.47.0 上的 bug 文件,尚未给出何时修复的里程碑。

      然而解决方法是:

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

      【讨论】:

        猜你喜欢
        • 2014-09-11
        • 2020-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-12
        • 2013-09-09
        • 2016-12-20
        相关资源
        最近更新 更多