当前位置:C++技术网 > 资讯 > MFC实现在电脑中查找文件

MFC实现在电脑中查找文件

更新时间:2015-12-02 17:29:12浏览次数:1+次

新建MFC对话框工程,在对话框上添加控件,将对话框设置为如图所示的对话框:

ID号分别设为:

查找:IDOK
....:IDC_CHOOSE
取消:IDC_CANCEL
请输入查找文件:IDC_FILENAME
请输入查找目录:IDC_FINDDIR
查找结果:IDC_RESULTLIST

为两个编辑框,列表框关联变量:

        CEdit	    m_FindDir;
	CListBox	m_RetList;
	CEdit	m_FileName;
再在对话框类的构造函数中添加一个CString m_szFindFile变量

并添加一个函数:

void FindFile(CString szFileName);
为“查找”“取消”“选择”按钮分别建立消息响应,同时建立新添加的函数建立消息响应:
void CFindFileDlg::OnOK() 
{
	CString  szFindDir;
	m_FileName.GetWindowText(m_szFindFile);
	m_FindDir.GetWindowText(szFindDir);
	if (!m_szFindFile.IsEmpty() && !szFindDir.IsEmpty())	//查找文件
	{
		FindFile(szFindDir);
	}

}

//查找文件
void CFindFileDlg::FindFile(CString szFileName)
{
	CString szFindName = szFileName;
	szFindName.Insert(szFileName.GetLength(), "\\*.*");
	
	WIN32_FIND_DATA	fd_Data;
	memset(&fd_Data, 0, sizeof(WIN32_FIND_DATA));
	HANDLE hFindFile =FindFirstFile(szFindName, &fd_Data);
	if (hFindFile != NULL)
	{
		while (FindNextFile(hFindFile, &fd_Data))
		{
			if (fd_Data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY && 
				(strcmp(fd_Data.cFileName, ".") != 0) &&
				(strcmp(fd_Data.cFileName, "..") != 0) &&
				(strcmp(fd_Data.cFileName, "...") != 0) )	//目录
			{
				CString szFullPath = szFileName;
				szFullPath.Insert(szFullPath.GetLength(), "\\");
				szFullPath.Insert(szFullPath.GetLength(), fd_Data.cFileName);
				FindFile(szFullPath);
			}
			else if (!(fd_Data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))	//文件
			{
				CString szFullName = szFileName;
				szFullName.Insert(szFullName.GetLength(), "\\");
				szFullName.Insert(szFullName.GetLength(), fd_Data.cFileName);
				if (stricmp(m_szFindFile.GetBuffer(0), fd_Data.cFileName) == 0)
				{
					m_RetList.AddString(szFullName);
				}
			}
		}
	}
	FindClose(hFindFile);
}

void CFindFileDlg::OnChoose() 
{
	char szBuffer[MAX_PATH] = {0};
	BROWSEINFO brInfo;
	memset(&brInfo, 0, sizeof(BROWSEINFO));
	brInfo.pszDisplayName = szBuffer;
	brInfo.lpszTitle = "文件浏览";
	LPITEMIDLIST pItemList = SHBrowseForFolder(&brInfo);
	if (pItemList != NULL)
	{
		char szDir[MAX_PATH] = {0};
		SHGetPathFromIDList(pItemList, szDir);
		m_FindDir.SetWindowText(szDir);
	}
}

void CFindFileDlg::OnCancel() 
{
	CDialog::OnCancel();	
}
代码实现:

如果对于这些代码里的函数调用你不懂,请在本站搜索作者“阿郎”,我写的文章里有几篇《清理垃圾文件软件源代码解析2

系列,对这些函数做了解释。