• 小记——文件遍历


    void Cdialog1Dlg::OnBnClickedOk()
    {
    	// TODO: 在此添加控件通知处理程序代码
    
    	const char psDirName[] = "F:\SQLyaog\SQLyog Trial";
    	TraveDir((char *)psDirName);
    
    	//CDialogEx::OnOK();
    }
    
    #define MAXSIZE 100
    void Cdialog1Dlg::TraveDir(char* psDirName)
    {
    	CFileFind FindFile;		//CFileFind类
    	long hFile;
    	char szDir[MAXSIZE];
    	strcpy_s(szDir,MAXSIZE,psDirName);
    	strcat_s(szDir,MAXSIZE,"\*.*");
    	hFile = FindFile.FindFile(_T(szDir));
    	if(!hFile)//判断此文件夹目录下有没有文件或文件夹(目录)
    	{
    		AfxMessageBox("This directory is not exist file");
    		return ;
    	}
    	else//如果有文件或文件夹(目录)
    	{
    		while(FindFile.FindNextFileA())//顺序遍历文件夹目录,找出当前目录下文件夹,用递归法查找所用目录及其子目录,以便检索
    		{//IsDirectory判断此文件是否是文件夹(目录),IsDots判断此文件是否是"."当前目录".."上一层目录
    		 //这一点很重要,不然程序会陷入死循环,在当前目录下循环,或遍历上一层目录再上一层目录。。。
    			if(FindFile.IsDirectory() && !FindFile.IsDots())//important
    			{
    				char szDirSpaceNext[MAXSIZE];
    				strcpy_s(szDirSpaceNext,MAXSIZE,psDirName);
    				strcat_s(szDirSpaceNext,MAXSIZE,"\");
    				strcat_s(szDirSpaceNext,MAXSIZE,FindFile.GetFileName());//记录当前文件是目录时的文件路径,以便下面递归调用
    				AfxMessageBox(szDirSpaceNext);
    				TraveDir((char*) szDirSpaceNext);//递归调用,遍历子目录。
    			}
    		}
    	}
    	char szDirSpace[MAXSIZE];
    	strcpy_s(szDirSpace,MAXSIZE,psDirName);
    	strcat_s(szDirSpace,MAXSIZE,"\*.exe");
    	hFile = FindFile.FindFile(_T(szDirSpace));//搜索目录下的所有exe文件。
    	while(hFile)//判断是否遍历完全到
    	{
    		hFile = FindFile.FindNextFileA();
    		
    		AfxMessageBox((LPCTSTR)FindFile.GetFileName());
    		
    	}
    	/*
    	错误警示;
    	1.低级错误while(FindFile.FindNextFileA());原因是复制粘贴,粘贴了do while()中的while语句
    	2.下面这样做所得答案总是少一个满足要求的值。
    	if(hFile)//下面的没有去判断释放满足条件。
    	{
    		while(FindFile.FindNextFileA());//注意这里的分号。
    		{
    		
    			AfxMessageBox((LPCTSTR)FindFile.GetFileName());
    
    		}
    		
    	}
    	*/
    }
    

      还有这里忘记要Close了。

  • 相关阅读:
    C语言I博客作业02
    C语言II—博客作业01
    学期总结
    C语言I博客作业08
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业05
    C语言I 博客作业04
    C语言II博客作业04
    C语言II博客作业03
  • 原文地址:https://www.cnblogs.com/jiaoluo/p/3523178.html
Copyright © 2020-2023  润新知