MFC应用实例:[57]遍历目录下的每个文件
1、新建一个基于对话框的应用程序,工程名为CheckFileDemo。
![MFC应用实例:[57]遍历目录下的每个文件](https://exp-picture.cdn.bcebos.com/3852f6e5eceeadbc110fabc3cd18dfdae53b7bb4.jpg)
2、界面设计如下,添加三个按钮,两个编辑框,一个列表框
![MFC应用实例:[57]遍历目录下的每个文件](https://exp-picture.cdn.bcebos.com/46315818dfdae43b8fa6ee92c457935652bb74b4.jpg)
3、双击“>>”按钮添加响应函数OnFolder(),在响应函数OnFolder()中添加一下代码:
void CCheckFileDemoDlg::OnFolder()
{
CString strFilter;
strFilter="All Files(*.*)|*.*||";
CFileDialog dlg(TRUE, NULL, NULL, OFN_EXPLORER|OFN_HIDEREADONLY|
OFN_ENABLESIZING|OFN_FILEMUSTEXIST,strFilter);
if(dlg.DoModal() == IDOK ) //显示打开文件对话框
{
m_folder=dlg.GetPathName();
UpdateData(false);
}
}
![MFC应用实例:[57]遍历目录下的每个文件](https://exp-picture.cdn.bcebos.com/4e168d5653bbf820dedb7ab8ba21056105a36eb4.jpg)
4、在CCheckFileDemoDlg类中添加FindFile()函数
void CCheckFileDemoDlg::FindFile(CString Curdir)
{
HANDLE hfile;//查找文件句柄
WIN32_FIND_DATA wfdata;//文件信息结构
BOOL IsOver=false;//查找过程结束标志
CString strname;//文件名
CString strfull;//全路径
hfile=FindFirstFile((LPCTSTR)("*.*"),&wfdata);//查找第一个文件
if(hfile==INVALID_HANDLE_VALUE)
IsOver=true;//查找过程结束
while(!IsOver)
{
strname.Format("%s",wfdata.cFileName);//获取找到的文件名
strfull=Curdir+"\\"+strname;//全路径
if((wfdata.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)&&(wfdata.cFileName[0]!=_TEXT('.')))//
{
SetCurrentDirectory(wfdata.cFileName);
FindFile(strfull);//递归调用
SetCurrentDirectory("..");//返回当前目录
}
else if(wfdata.cFileName[0]!=_TEXT('.'))
m_fileList.AddString(strfull);
IsOver=!FindNextFile(hfile,&wfdata);//查找下一个文件
}
FindClose(hfile);//关闭句柄
}
![MFC应用实例:[57]遍历目录下的每个文件](https://exp-picture.cdn.bcebos.com/05e24be983aee8d79b0a0f5c6b781431deb666b4.jpg)
5、双击“遍历文件”按钮添加响应函数OnSearch(),在响应函数OnSearch()中添加一下代码:
void CCheckFileDemoDlg::OnSearch() //遍历当前目录下的文件
{
CString oldDir;//保存原始的当前路径
UpdateData(true);//获取输入数据
GetCurrentDirectory(50,(LPTSTR)(LPCTSTR)oldDir);//获取当前路径
if(!SetCurrentDirectory((LPCTSTR)m_folder)||m_folder.IsEmpty())//如果有输入
{
m_folder=(LPCTSTR)oldDir;
UpdateData(false);
}
while(m_fileList.GetCount()!=0)//清空列表框
{
int index=m_fileList.GetTopIndex();
m_fileList.DeleteString(index);
}
FindFile(CString(m_folder));//开始查找
m_filenum=m_fileList.GetCount();//获取文件数目
UpdateData(false);//编辑框显示
SetCurrentDirectory((LPCTSTR)oldDir);//恢复当前目录
}
![MFC应用实例:[57]遍历目录下的每个文件](https://exp-picture.cdn.bcebos.com/332d496699cf0253e443cf366b36e29146e85fb4.jpg)
6、遍历CheckFileDemo的文件目录,程序运行如下:
![MFC应用实例:[57]遍历目录下的每个文件](https://exp-picture.cdn.bcebos.com/3c42a5ea3e863048b7633b67c33104ebf7a752b4.jpg)