跨平台库,用于操作Windows路径?

5

我正在编写一个跨平台应用程序,需要检查和操作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 路径语法不可用(在源代码中被 #ifdef 掉了)。因此,路径 "C:\path" 在 Windows 中被认为是绝对路径,在 Linux 中被认为是相对路径。
你们能推荐一个跨平台的 C++ 库,可以检查和操作 Windows 路径吗?
目前,我将仅执行一个操作,即检查路径是否为绝对路径。
我将使用以下标准来判断绝对路径:它既包含驱动器号,又以 \ 开头。符合此标准的绝对路径示例为 C:\path。根据此标准,以下都是相对路径示例:C:path\path

2
你知道这个区别并不是那么绝对吗?考虑一下有效路径 C:foo.txt。它使用的是 C 盘的当前工作目录! - MSalters
1
MSalters:当我提出这个问题时,我没有考虑到这一点。看起来编写我正在尝试维护的代码的原始作者也没有考虑到这一点。现在我必须找出我们实际想要的行为是什么... - Magnus Hoff
3个回答

2
似乎很难找到与此相关的库。一种可能是Winelib中的PathIsRelative,但我不想使用Winelib。
最终我为了解决这个小问题而采取了一个非常具体的解决方案。假设路径是正确的(在我的情况下是合理的假设),绝对路径将包含:\,而相对路径则不会。
因此,虽然不太好但是可行的解决方案是:没有合适的库。检查:\是否存在。

1

这看起来具有与boost相同的基本假设和缺陷;只有在Windows下编译时才能使用Windows语法。 - Magnus Hoff

0

你能详细说明一下程序在Linux上如何处理Windows路径吗?

也许只需要对Windows路径字符串进行简单的转换,将其语法转换为Unix路径,然后使用boost::filesystem进行操作即可。


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