1

我有一个 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

4

1 回答 1

2

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

例子:

#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 });
}
于 2019-09-16T16:33:04.420 回答