C++获取文件夹下所有文件(包括子文件夹)

Talk is cheap. Show me the code.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <filesystem>
#include <string>
#include <vector>

namespace fs = std::filesystem;

void ListDir(
const std::string& dir,
const std::string& extension,
std::vector<std::string>& filelist)
{
for (const auto& entry : fs::directory_iterator(dir))
{
fs::path fPath = entry.path();
if (fs::is_directory(fPath))
{
ListDir(fPath.string(), extension, filelist);
}
if (fs::is_regular_file(fPath))
{
if (fPath.has_extension())
{
if (fPath.extension().string().compare(extension) == 0)
{
filelist.emplace_back(fPath.string());
}
}
}
}
}

注意:

  • filesystem 是C++17才有的功能,所以C++语言标准至少设置为C++17

  • 此函数会递归的遍历所有子文件夹

用法:

  • dir 为文件夹路径
  • extension 为想获取的文件后缀,如 '.jpg'
  • filelist 为最后输出的文件路径数组