纯C++实现:
// suffix = "\\*.dll"
int GetAllFile(const char *Path, const std::string suffix, std::vector<std::string> &fileList)
{
char szFind[MAX_PATH];
WIN32_FIND_DATA FindFileData;
strcpy_s(szFind, Path);
strcat_s(szFind, suffix);
HANDLE hFind = FindFirstFile(szFind, &FindFileData);
if (INVALID_HANDLE_VALUE == hFind)
return -1;
std::string strPath = Path;
strPath += "\\";
do
{
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
if (strcmp(FindFileData.cFileName, ".") != 0 && strcmp(FindFileData.cFileName, "..") != 0) {
//发现子目录,递归之
char szFile[MAX_PATH] = { 0 };
strcpy_s(szFile, Path);
strcat_s(szFile, "\\");
strcat_s(szFile, FindFileData.cFileName);
GetAllPluginFile(szFile, fileList);
}
}
else {
fileList.push_back(strPath + FindFileData.cFileName);
}
} while (FindNextFile(hFind, &FindFileData));
FindClose(hFind);
return 0;
}
QT实现:
int GetAllFile(const QString filepath, const QString suffix, QStringList &fileList)
{
QDir dir(filepath);
dir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot | QDir::Files);
dir.setSorting(QDir::DirsFirst);
for (QFileInfo &info : dir.entryInfoList(QStringList() << suffix))
{
if (info.isDir())
{
QStringList list;
GetAllFile(info.absoluteFilePath(), suffix, list);
fileList.append(list);
}
fileList.append(info.absoluteFilePath());
}
return 0
}