void CDlg*** ::BrowseDir(char* lpPath) // 文件夹路径
{
char szFind[MAX_PATH];
WIN32_FIND_DATA FindFileData;
strcpy(szFind, lpPath);
strcat(szFind, "//*.*");
HANDLE hFind = ::FindFirstFile(szFind, &FindFileData);
if (INVALID_HANDLE_VALUE == hFind)
return;
while (TRUE)
{
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if (FindFileData.cFileName[0] != '.')
{ // 结果为文件,继续搜索
char szFile[MAX_PATH];
strcpy(szFile, lpPath);
strcat(szFile, "//");
strcat(szFile, FindFileData.cFileName);
BrowseDir(szFile);
}
}
else
{
CString strFilePath; // 文件路径
strFilePath.Format(_T("%s//%s"), lpPath, FindFileData.cFileName);
}
if (!FindNextFile(hFind, &FindFileData))
break;
}
FindClose(hFind);
}
void CDlg*** ::OpenFolder()
{
BROWSEINFO bBinfo;
TCHAR buffer[512] = ""; //文件名
TCHAR FullPath[512] = ""; //文件完整路径
bBinfo.hwndOwner = m_hWnd; //设置对话框所有者句柄
bBinfo.pidlRoot = NULL;
bBinfo.pszDisplayName = buffer; //返回目录名缓冲区
CString strVideoFile = _T("浏览文件");
bBinfo.lpszTitle = strVideoFile;
//bBinfo.ulFlags = BIF_BROWSEINCLUDEFILES; //设置标志允许选择目录下的文件
bBinfo.ulFlags = /*BIF_EDITBOX | */BIF_RETURNONLYFSDIRS; //设置标志只允许选择目录
bBinfo.lpfn = NULL;
bBinfo.lParam = bBinfo.iImage = 0;
ITEMIDLIST* lpDlist = ::SHBrowseForFolder(&bBinfo);
if (lpDlist)
{
::SHGetPathFromIDList(lpDlist, FullPath);
TRACE("搜索文件夹:%s/n", FullPath);
TRACE("开始搜索/n");
BrowseDir(FullPath);
TRACE("搜索结束/n");
}
}
遍历路径下所有文件(包括子文件夹)
于 2009-07-17 16:48:00 首次发布
本文介绍了一个使用C++实现的文件夹遍历方法及如何通过对话框让用户选择文件夹进行打开操作。该方法首先利用SHBrowseForFolder函数获取用户选择的文件夹路径,然后递归地遍历该文件夹及其子文件夹内的所有文件。
摘要由CSDN通过智能技术生成