多语言展示
当前在线:1796今日阅读:145今日分享:43

MFC应用实例:[57]遍历目录下的每个文件

实现遍历所选目录下的每个文件,并统计文件的个数
工具/原料

Microsoft Visual Studio 2015

方法/步骤
2

界面设计如下,添加三个按钮,两个编辑框,一个列表框

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

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);//关闭句柄}

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);//恢复当前目录}

6

遍历CheckFileDemo的文件目录,程序运行如下:

注意事项

注意文件的遍历

推荐信息