MFC搜索文件(一)

编译软件:vs2013

程序功能:在选定的文件夹下查找指定文件,并将结果显示到列表控件中。

步骤:

 第一步: 

新建一个基于对话框的应用程序

步骤:文件-->新建-->项目-->MFC应用程序-->基于对话框-->完成

第二步:

视图-->其他窗口-->资源视图,将窗体的默认按钮删除,用工具箱添加控件

添加两个静态文本控件;添加2个文本编辑控件,ID属性自己设置(我设置的IDC_EDADD和IDC_EDFILENAME);

添加3个按钮控件,浏览(IDC_ADD),查找(IDC_Button1),停止(IDC_STOP);

添加一个列表控件(这里使用的是List Box),添加一个变量:类别control,变量名m_Filelist;此控件需要根据需求更改属性。

提示:建议大家看看List Box 和ListCtrl的区别,不要弄混淆了。如果只有一列数据,建议使用list box;ListCtrl强大得多了,支持多列显示

列表控件更改后属性如下:(你也可以进行其他的更改,不明白的地方自己百度,百度上很细)

第三步:写代码(注释上写得很详细)

在头文件搜索文件.h加入以下变量:

public:
	CString strfilename;
	BOOL bstop;       
	void FindFile(CString strPath);        //自定义函数,实现查找文件

在OnInitDialog中设置初始化变量:

“浏览”按钮的实现函数(该函数用于添加要查找文件所在的文件夹):
 

//浏览按钮
void C搜索文件Dlg::OnBnClickedAdd()
{
	// TODO:  在此添加控件通知处理程序代码
	BROWSEINFO bi;//BROWSEINFO结构中包含有用户选中目录的重要信息
	char buffer[MAX_PATH];
	bi.hwndOwner = GetSafeHwnd();//获取窗口句柄
	bi.pidlRoot = NULL;//桌面目录被使用
	bi.pszDisplayName = buffer;//保存用户选中的目录字符串的内存地址
	bi.lpszTitle = "选择一个文件夹"; //
	bi.ulFlags = BIF_EDITBOX;//浏览对话框中包含一个编辑框
	bi.lpfn = NULL;//应用程序定义的浏览对话框回调函数的地址
	bi.lParam = 0;//对话框传递给回调函数的一个参数指针
	bi.iImage = 0;//图像将被指定为系统图像列表中的索引值0
	LPITEMIDLIST pList = NULL; //转成 LPCITEMIDLIST 这种结构的才支持打开
	if ((pList = SHBrowseForFolder(&bi)) != NULL)//显示浏览窗口
	{
		char path[MAX_PATH];
		ZeroMemory(path, MAX_PATH);//初始化为0
		SHGetPathFromIDList(pList, path);//SHGetPathFromIDList把项目标志符列表转换为文档系统路径
		GetDlgItem(IDC_EDADD)->SetWindowTextA(path);
	}
}

自定义函数实现查找文件:
 

//查找文件
void C搜索文件Dlg::FindFile(CString strPath)
{
	CString strtemp;
	if (strPath.Right(1) != "\\")  //判断文件扩展名
		strtemp.Format("%s\\*.*", strPath);
	else
	{
		strtemp.Format("%s*.*", strPath);
	}
	CFileFind findfile;//本地文件查找类
	BOOL bfind = findfile.FindFile(strtemp);//查找文件
	while (bfind)
	{
		bfind = findfile.FindNextFile();// 查找下一个文件
		if(strfilename == findfile.GetFileName())
		{
			m_Filelist.AddString(findfile.GetFilePath());  //添加行(文件路径名)
		}
		if (findfile.IsDirectory() && !findfile.IsDots())//IsDirectory()如果是一个目录则返回true,IsDots判断是否为点
		{
			FindFile(findfile.GetFilePath());// GetFilePath()返回文件的完整路径
		}
		if (bstop)
		{
			AfxMessageBox("查无此文件");
			return;
		}
	}
}

“”查找“”按钮的实现函数,该函数用于查找文件:

//查找按钮
void C搜索文件Dlg::OnBnClickedButton1()
{
	// TODO:  在此添加控件通知处理程序代码
	CString strpath;
	GetDlgItem(IDC_EDFILENAME)->GetWindowText(strfilename);
	GetDlgItem(IDC_EDADD)->GetWindowText(strpath);
	FindFile(strpath);
	bstop = FALSE;
}

“停止”按钮的实现函数,终止对文件的查找:
 

//停止按钮
void C搜索文件Dlg::OnBnClickedStop()
{
	// TODO:  在此添加控件通知处理程序代码
	bstop = TRUE;
}

列表框控件代码:
 

//列表控件设置
void C搜索文件Dlg::OnLbnSelchangeList2()
{
	// TODO:  在此添加控件通知处理程序代码
	m_Filelist.SetHorizontalExtent(1000);//1000是指listbox的Item的最大长度
}

结果截图:

源代码下载地址:https://download.csdn.net/download/cai_niaocainiao/10635819

猜你喜欢

转载自blog.csdn.net/cai_niaocainiao/article/details/82219484