【问题标题】:Cross-platform library for manipulating Windows paths?用于操作 Windows 路径的跨平台库?
【发布时间】:2010-12-23 05:15:03
【问题描述】:

我正在编写一个需要检查和操作 Windows 路径的跨平台应用程序。

具体来说,对于我现在遇到的特定问题,我需要知道路径是绝对路径还是相对路径。

当前代码使用boost::filesystem::path,这在 Windows 上当然就像一个魅力:

boost::filesystem::path the_path(the_path_as_a_string);
if (!the_path.has_root_path()) { /* do stuff */ }

这种方法的问题是boost::filesystem::path只有两种模式:原生和便携。这意味着我在Linux下编译时Windows路径语法不可用(在源代码中是#ifdefed)。因此,路径“C:\path”在 Windows 中被认为是绝对路径,但在 Linux 中是相对路径。


你们能推荐一个可以检查和操作 Windows 路径的跨平台 C++ 库吗?


目前,我要做的唯一 Windows 路径操作是检查路径是否为绝对路径。

我将用于绝对路径的标准是它都包含驱动器号,并且路径以\ 开头。此标准下的绝对路径示例为C:\path。这些都是此标准下的相对路径示例:C:path\path

【问题讨论】:

  • 你知道区别不在于黑白吗?考虑有效路径C:foo.txt。它使用 C: 驱动器的当前工作目录 !
  • MSalters:我问这个问题的时候还没有想到。我试图维护的代码的原始作者似乎也没有想到这一点。现在我必须找出我们真正想要的行为......

标签: c++ boost path boost-filesystem


【解决方案1】:

似乎很难为此找到一个库。一种可能是 Winelib 中的PathIsRelative,但我不想使用 Winelib。

我最终做了一个非常具体的解决方案,只是为了决定这件小事。假设路径是正确的(在我的例子中是一个公平的假设),绝对路径将包含:\,而相对路径不会。

因此,糟糕但有效的解决方案是:没有合适的库。检查:\是否存在。

【讨论】:

    【解决方案2】:

    您能否详细说明该程序对 Linux 上的 Windows 路径的作用?

    也许对 Windows 路径字符串应用一些简单的转换,在语法上将其转换为 Unix 路径,然后使用 boost::filesystem 来操作它就足够了。

    【讨论】:

      【解决方案3】:

      QFileInfo 的 QT 怎么样?

      【讨论】:

      • 这看起来与 boost 具有相同的基本假设和缺陷; Windows语法仅在Windows下编译时可用:(
      猜你喜欢
      • 2015-07-04
      • 2013-01-03
      • 2019-04-27
      • 1970-01-01
      • 2014-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多