遍历路径下所有文件(包括子文件夹)

本文介绍了一个使用C++实现的文件夹遍历方法及如何通过对话框让用户选择文件夹进行打开操作。该方法首先利用SHBrowseForFolder函数获取用户选择的文件夹路径,然后递归地遍历该文件夹及其子文件夹内的所有文件。
摘要由CSDN通过智能技术生成

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");
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值