返回混合 \ 和 / 的文件系统路径字符串方法

filesystem path string method returning mixed and /

本文关键字:路径 字符串 文件系统 方法 混合 返回      更新时间:2023-10-16

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