我是C++的新手,我在做基本的事情时有点挣扎。如果这个问题太愚蠢或者有人问过这个问题,我很抱歉。我试图在StackOverflow上搜索,但没有成功。
我有以下问题:我有两个文件夹,它们的文件数相同,我们把这个数称为N。我想做一个如下的for循环:
for file1 in directory 1 , file2 in directory2:
filename_file_folder_1 = get_filename(file1);
filename_file_folder_2 = get_filename(file2);
字符串
这一定是可能的,因为我知道如何在Python中实现它。因此,我希望C++也允许这样做。然而,我还没有找到解决这个问题的方法。
3条答案
按热度按时间guicsvcw1#
字符串
https://godbolt.org/z/rq8GEMsrd
免责声明:我不知道你到底在做什么,也没有任何保证,这两个迭代器将有一些特定的顺序,所以可能需要一些元素匹配。
在C++20中,有
std::ranges::views::zip
,相当于Python的zip
,但从what I've tried开始,还没有编译器具有此功能。tvz2xvvm2#
如果你知道这两个目录有相同数量的条目,你可以使用
std::filesystem::recursive_directory_iterator
来遍历它们(或者如果你不想递归地遍历每个目录,就简单地使用std::filesystem::directory_iterator
)。代码如下:
std::transform
遍历两个目录,就好像它们是两个范围,并且,对于每次迭代,std::vector
;对于两个输入文件夹树,例如:
字符串
它输出:
的数据
注意
std::recursive_directory_iterator
的the iteration order is unspecified(同样适用于std::directory_iterator
)。如果你需要处理条目的排序列表,我会:
std::vector
中。下面的代码遍历两个文件夹并打印它们的排序条目。它使用 predicate 来过滤要打印的条目(例如,所有条目,或只是普通文件)。
型
请注意,在应用 predicate 之后,条目的数量应该是相同的,而这段代码并没有检查这一点。这就是为什么在打印所有排序的文件时,
/blah2/foo2
不会显示。如果你用print_all_files_sorted(path_2, path_1)
调用这段代码,你会遇到一个问题。这可以通过在std::transform
之前进行简单的检查来轻松处理:型
a0zr77ik3#
我希望这是你正在寻找的:(假设directory 1/2是向量/数组)
字符串