它使用标准的 c++ 功能。无需在代码中包含任何第三方库。
仅发送目录路径作为参数。它将还原该文件夹及其子文件夹中存在的每个文件路径。
此外,如果您需要对任何特定类型的文件(即 .txt 或 .jpg)进行排序,传递扩展名,它将打印所有具有相应扩展名的文件路径。
#include <Windows.h>
#include<iostream>
#include<vector>
#include<string>
using namespace std;
vector<string> files;
std::string Recursive(std::string folder) {
std::string search_path = folder + "/*.*";
WIN32_FIND_DATA fd;
HANDLE hFind = ::FindFirstFile(search_path.c_str(), &fd);
std::string tmp;
if (hFind != INVALID_HANDLE_VALUE) {
do {
if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
if (!(!strcmp(fd.cFileName, ".") || !strcmp(fd.cFileName, ".."))) {
tmp = folder + "\\";
tmp = tmp + fd.cFileName;
Recursive(tmp);
}
}
else {
std::string FinalFilePath = folder + "\\" + fd.cFileName;
files.push_back(FinalFilePath);
}
} while (::FindNextFile(hFind, &fd));
::FindClose(hFind);
}
return folder;
}
bool has_suffix(const std::string& str, const std::string& suffix) {
return str.size() >= suffix.size() &&
str.compare(str.size() - suffix.size(), suffix.size(), suffix) == 0;
}
int main(){
std::string folder = "C:\\Users\\Omkar\\Desktop\\Test";
Recursive(folder);
std::string t;
const auto needle = std::string(".txt");
while (!files.empty()) {
t = files.back();
if (has_suffix(t, ".mmt")) {
cout << "FINAL PATH : " << t << endl;
t.clear();
}
files.pop_back();
}
return 0;
}