VC打开文件夹
我有一个名问DATA的文件夹,里面还有很多子文件夹,每个子文件夹下有图片,我想挨个访问DATA文件夹下的所有子文件夹下的文件,要如何编程实现。
[解决办法]
void visit(LPCTSTR lpszPath, size_t dep)
{
TCHAR szFind[PATH];
lstrcpy(szFind, lpszPath);
if (szFind[lstrlen(szFind) - 1] != '\\') lstrcat(szFind, "\");
WIN32_FIND_DATA wfd;
HANDLE hFind = FindFirstFile(lstrcat(szFind, "*.*"), &wfd);
if (hFind == INVALID_HANDLE_VALUE) return;
do
{
if (wfd.cFileName[0] == '.') continue;
for (size_t i = 0; i < dep; ++i) putchar('\t');
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
printf("[%s]\n", wfd.cFileName);
lstrcpy(szFind, lpszPath);
if (szFind[lstrlen(szFind) - 1] != '\\') lstrcat(szFind, "\");
visit(lstrcat(szFind, wfd.cFileName), dep + 1);
}
else printf("%s\n", wfd.cFileName);
} while (FindNextFile(hFind, &wfd));
FindClose(hFind);
}
BOOL FindFileInFolder(CString strPathName, CString strFileName)
{
CFileFind finder;
CString strSearch;
BOOL bFind;
strFileName.MakeLower();
if (strPathName.Right(1) == "\")
strSearch.Format("%s*.*", strPathName);
else
strSearch.Format("%s\\*.*", strPathName);
bFind = finder.FindFile(strSearch);
if (!bFind)
{
finder.Close();
return FALSE;
}
while (bFind)
{
bFind = finder.FindNextFile();
strPathName = finder.GetFilePath();// 取得文件全名
if (finder.IsDots()) continue;// 是点,忽略
if (finder.IsSystem()) continue;// 是系统文件,忽略
if (finder.IsDirectory())// 是目录
{
if (FindFileInFolder(strPathName, strFileName)) // 递归调用,进入目录
{
finder.Close();
return TRUE;
}
}
else // 是文件
{
CString strFileFind = finder.GetFileName();
strFileFind.MakeLower();
if (strFileFind == strFileName)
{
finder.Close();
return TRUE;
}
}
}
finder.Close();
return FALSE;
}