c++ - 文件系统路径字符串方法返回 mixed\and/

标签 c++ std-filesystem

我有一个 C++ 程序,我在其中使用递归迭代器遍历我作为参数提供给程序的文件夹。

问题是,当我在路径上调用 .string 时,我在路径中混合了\和/。 使用 .generic_string 修复了这个问题,但我想知道这是 VS2019 中的错误还是允许的行为。

举几个例子: 我将 a/b 作为我程序的输入。

当我遍历所有文件并使用 .string 打印它们时 我明白了

a/b\c\bla.txt

a/b\d\lol.txt

当我使用 .generic_string 时,我得到了

a/b/c/bla.txt

a/b/d/lol.txt

最佳答案

确保在将用户提供的参数与目录迭代器一起使用之前将其转换为绝对路径,否则,它将显示用户提供的任何内容。

例子:

#include <filesystem>
#include <iostream>
#include <string_view>
#include <vector>

namespace fs = std::filesystem;

int ftw(const fs::path& p) {
    // give an absolute path to the iterator
    for (const auto& f : fs::recursive_directory_iterator(fs::absolute(p))) {
        std::cout << f.path().string() << "\n";
    }
    return 0;
}

int cppmain(const std::string_view program, std::vector<std::string_view> args) {
    for (const auto& arg : args)
        ftw(arg);
    return 0;
}

int main(int argc, char* argv[]) {
    return cppmain(argv[0], { argv + 1, argv + argc });
}

关于c++ - 文件系统路径字符串方法返回 mixed\and/,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57957190/

相关文章:

c++ - 我应该将关键字 `extern` 添加到常量的定义中以在源文件之间共享吗?

c++ - c++中 'char()'和 'char'有什么区别

c++ - 代码调用终止而不是抛出异常

c++ - std::filesystem 根路径如何将自身作为父路径?

c++ - directory_entry 的输出与具有变体的类的重载 ostream 运算符<< 冲突

c++ - 调用 std::filesystem::copy() 时可能返回的错误代码是什么?

c++ - 如果模板参数是函数指针

c++ - 为什么我的驱动程序只读取字符串的一部分?

c++ - 获取可执行文件的路径(使用 std::filesystem)

c++ - C++17 std::filesystem::path 中的 native 路径分隔符错误?