【问题标题】:How to query the length of the boost::filesystem::path?如何查询 boost::filesystem::path 的长度?
【发布时间】:2011-11-07 04:52:25
【问题描述】:

我在boost::filesystem::path 中找不到“路径长度”方法,有吗?

如果没有这样的方法(为什么?) - 我应该使用 .native().length() 还是 .string().length() ?
我认为 .string().length() 应该更快吧?

【问题讨论】:

  • 我只需要对路径进行长度查询。我不想在这样做的时候创建一个 different 字符串。看起来 string() 可能会做一些转换() 而 native() 不会。

标签: c++ boost path


【解决方案1】:

.native() 直接返回路径的内部表示,而string() 可能会执行一些转换。总而言之,无论您使用native().length() 还是string().length(),都不会有太大的不同。

【讨论】:

    【解决方案2】:

    string() 方法怎么样? (返回 std::string)

    fs::path path;
    ...
    path.string().size();
    

    【讨论】:

      【解决方案3】:

      路径没有长度,它并不真正符合你想要它的原因。

      .string() 是一般推荐用于外部可见表示的东西。查看他们文档中的path decomposition table,以获得对预期结果的温暖模糊保证。

      我没有理由相信两者的性能会有所不同。在您的分析器告诉您之前,您可能不应该担心它。 :)

      【讨论】:

      • 是的。另一方面,我认为创建包含“外部可见表示”的完全不必要的字符串没有意义,而我只需要获取路径长度。
      • @Dimitry C 你很可能正在创建它们。内部表示可能根本不是字符串,它的长度也不会提供信息。它们支持许多看起来非常不同的文件系统。他们的参考资料特别指出使用.string() 而不是.native(),除非你必须这样做。
      • 谢谢。我查看了boost.org/doc/libs/1_47_0/boost/filesystem/v3/path.hpp,至少在 POSIX 世界中,两者都只返回对内部字符串的引用。在 Windows 中 .string() 转换斜杠。就是这样。
      猜你喜欢
      • 2016-06-02
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-24
      • 2011-04-23
      • 2018-02-18
      • 1970-01-01
      相关资源
      最近更新 更多