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

2025-11-06 01:23:01

1、新建一个基于对话框的应用程序,工程名为CheckFileDemo。

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

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

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

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]遍历目录下的每个文件

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]遍历目录下的每个文件

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]遍历目录下的每个文件

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

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

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢