如何在C++中获取特定于平台的路径分隔符?

9

如何在C ++中获取特定平台的路径分隔符(不是目录分隔符),即需要将多个路径组合成列表所需的分隔符(例如 PATH 环境变量)。

在Linux下,这将是,在Windows下是;

换句话说,我正在寻找Python的 os.pathsep ,Java的 path.separator 或PHP的 PATH_SEPARATOR 的C ++等价物。

如果Boost提供了这样的功能,那就很好,因为我们无论如何都在使用它。 如果没有,我想任何其他解决方案都可以。

我能找到的所有内容(包括这里和其他地方)要么只是检索目录分隔符的方法(即 / 与 \ ),要么与其他语言相关而不是C ++。


3
真的吗?你读了问题吗? - Nick
@Nick - 噢,抱歉,我经常读到“路径分隔符”这个词组,所以记得那个问题 - 那肯定不是重复的。 - Flexo
2
预处理器指令不够吗?#ifdef _WIN32 const std::string os_pathsep(";") #else const std::string os_pathsep(":") #endif - hmjd
嗯,某种程度上是的,但我宁愿在自己的代码中完全不必操心这个问题(类似于不必处理目录分隔符是“/”还是“\”)。 - Johannes S.
2个回答

6
根据评论,一个可能的方法是使用预处理器:
#ifdef _WIN32
const std::string os_pathsep(";");
#else
const std::string os_pathsep(":");
#endif

同意。我们在谈论的是5行代码。你可以在谷歌上搜索并在SO上提问的时间里写100次这个代码。并不是所有问题都需要高度工程化、优雅和卓越的解决方案。 - John Dibling
许多平台相关的事情可以归结为几行代码。然而,有一些库(比如上面提到的APR,我也希望有Boost)提供了这种功能,并确保未来的平台也得到了适当的关注,而无需我自己去处理。我只是惊讶于许多其他语言(或这些语言的库)都提供了这个功能,但C++却没有。 - Johannes S.
我相信你已经意识到,这些库通常依赖于人们抽出空闲时间进行改进。为什么不自己尝试一下,向boost::filesystem库添加一些内容呢? - Nick
2
@Nick 当然,我想我会在Boost邮件列表上询问。不知何故,我猜可能有某些原因(而不是疏忽),这就是为什么它不是库的一部分的原因...让我们看看。 - Johannes S.
好吧,显然没有其他选择(除了 @Nick 建议的 APR),所以我想我必须选择这个解决方案。谢谢大家。 - Johannes S.

4

只是为了这个目的而使用APR可能有些过头了...! - Nick
我刚刚检查了代码。APR有平台相关的实现(单独的源文件),其中适当的字符在函数内被硬编码。 - Johannes S.

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