c++ - 为什么不按默认构建的路径划分路径只需在 Visual Studio 中添加尾随分隔符?

标签 c++ filesystems filepath trailing-slash path-separator

假设 filesystem::current_path 将返回路径:

/tmp/1567519419.773012

但我想要一个尾随分隔符。如果看起来我应该做的就是:

filesystem::current_path() / filesystem::path()

This works on gcc给我:

/tmp/1567519419.773012/

但是在 ,而 filesystem::current_path 也为我提供了没有尾随分隔符的绝对路径,除以 filesystem::path() 无效。生成的路径仍然是绝对路径,没有尾随分隔符。

我想要跨平台兼容的代码,并且我想避免必须检测当前路径是否已经有尾随分隔符。

有什么可以给我的吗?

最佳答案

我对 filesystem 不够熟悉,不知道哪个编译器是正确的(如果涉及实现定义的行为,可能两者都是正确的)。但是,以下应该适用于正确实现 filesystem 的所有平台:

#include <iostream>
#include <filesystem>

int main() {
    auto foo = std::filesystem::current_path();
    foo += foo.preferred_separator; // A static data member of std::filesystem::path

    // The lexically normal form eliminates doubled separators
    std::cout << foo.lexically_normal().string() << '\n';
}

关于c++ - 为什么不按默认构建的路径划分路径只需在 Visual Studio 中添加尾随分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57773492/

相关文章:

android - 在哪里可以创建对 Windows 资源管理器和我的 Android 应用程序可见的目录?

java - Hadoop 2.6.0浏览文件系统Java

python - 想要使用 bash 或 python 在 n-1 级别(不包含任何子文件夹的文件夹)创建目录列表

mongodb - 更改 MongoDB 数据存储目录

java - 有没有一种干净简单的方法可以使 Java OS 中的文件路径字符串不可知?

c++ - 非 void 函数可能缺少返回值

c++ - 表达式的有效值是什么 (uninitialized_bool ? 1 : 2)?

c++ - 由于 operator= 不明确,multi_index_container 不适用于递归变体

c++ - 插入后对 vector 进行排序与​​插入到集合中

c# - 在后台 worker 查询中打开一个目录并处理文件/文件夹