这里是函数
void GetSubfolderInDirectory(std::vector<TCHAR*> *lstFileOut, const TCHAR* szPath)
{
HANDLE hFind;
WIN32_FIND_DATA findData;
TCHAR szCurrentDir[MAX_PATH];
_tcscpy_s(szCurrentDir, MAX_PATH, szPath);
TCHAR szPatternDir[MAX_PATH];
_tcscpy_s(szPatternDir, MAX_PATH, szCurrentDir);
_tcscat_s(szPatternDir, MAX_PATH, _T("/*"));
TCHAR* szFullPath;
bool bIsDirectory;
if ((hFind = FindFirstFile(szPatternDir, &findData)) == INVALID_HANDLE_VALUE)
{
return;
}
do {
bIsDirectory = (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0;
if (bIsDirectory)
{
if (findData.cFileName[0] == '.')
{
continue;
}
szFullPath = (_TCHAR*)malloc(_MAX_PATH * sizeof(_TCHAR));
_tcscpy_s(szFullPath, MAX_PATH, szCurrentDir);
_tcscat_s(szFullPath, MAX_PATH, _T("\\"));
_tcscat_s(szFullPath, MAX_PATH, findData.cFileName);
lstFileOut->push_back(szFullPath);
}
} while (FindNextFile(hFind, &findData));
FindClose(hFind);
}
void GetFilesInDirectory(std::vector<TCHAR*> *lstFileOut, const TCHAR* szPath,
const TCHAR* szPattern, bool bSearchSub)
{
HANDLE hFind;
WIN32_FIND_DATA findData;
TCHAR szCurrentDir[MAX_PATH];
_tcscpy_s(szCurrentDir, MAX_PATH, szPath);
TCHAR szPatternDir[MAX_PATH];
_tcscpy_s(szPatternDir, MAX_PATH, szCurrentDir);
_tcscat_s(szPatternDir, MAX_PATH, _T("/"));
_tcscat_s(szPatternDir, szPattern);
if ((hFind = FindFirstFile(szPatternDir, &findData)) == INVALID_HANDLE_VALUE)
return; /* No files found */
TCHAR* szFullPath;
bool bIsDirectory;
do {
szFullPath = (_TCHAR*)malloc(_MAX_PATH * sizeof(_TCHAR));
_tcscpy_s(szFullPath, MAX_PATH, szCurrentDir);
_tcscat_s(szFullPath, MAX_PATH, _T("\\"));
_tcscat_s(szFullPath, MAX_PATH, findData.cFileName);
bIsDirectory = (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0;
if (findData.cFileName[0] == '.')
{
free(szFullPath);
continue;
}
if (bIsDirectory)
{
continue;
}
else
{
lstFileOut->push_back(szFullPath);
}
} while (FindNextFile(hFind, &findData));
FindClose(hFind);
if (bSearchSub)
{
std::vector<TCHAR*> lstDir;
GetSubfolderInDirectory(&lstDir, szCurrentDir);
int nFolderCount = lstDir.size();
for (int i = 0; i < nFolderCount; i++)
{
GetFilesInDirectory(lstFileOut, lstDir[i], szPattern, bSearchSub);
}
}
}
这里是如何使用
TCHAR szCrtPath[MAX_PATH];
TCHAR szCrtPattern[MAXBYTE];
_tcscpy_s(szCrtPattern, _T("*.*"));
_tcscpy_s(szCrtPath, _MAX_PATH, _T("D:\\MyFolder"));
vector<TCHAR*> lstFile;
GetFilesInDirectory(&lstFile, szCrtPath, szCrtPattern, true);
关于模式的一些解释
*.* // Get all files
*.txt // Get txt file only
*sometext* // Get file with "sometext" in size file name
也许有更好的方法来获取目录中的所有子文件夹(函数 GetSubfolderInDirectory)。