zoukankan      html  css  js  c++  java
  • 使用FindFirstFile和FindNextFile对给定目录下所有文件进行广度优先遍历

    bool FFBreadth(TCHAR *szPath)//输入只能以C:\xx或C:\xx\*为格式,不能以‘\’作为路径结尾。详见MSDN的FindFirstFile.
    
    {
    
    	if(_taccess(szPath,0)==-1)
    
    	{
    
    		cout<<"路径不存在"<<endl;
    
    		return false;
    
    	}
    
    	wstring wsPath(szPath);
    
    	if(wsPath.back()!=_T('*'))
    
    		wsPath=wsPath+_T("\\*");
    
    	HANDLE hd=INVALID_HANDLE_VALUE;
    
    	WIN32_FIND_DATA fd;
    
    	::memset(&fd,0,sizeof(fd));
    
    	LARGE_INTEGER li;
    
    	queue<wstring> q;
    
    	wofstream wof(_T("f:\\tra-data2.txt"));
    
    	hd = FindFirstFile(wsPath.c_str(),&fd);
    
    	if(hd == INVALID_HANDLE_VALUE)
    
    	{
    
    		cout<<"INVALID_HANDLE_VALUE"<<endl;
    
    		wof.close();
    
    		return false;
    
    	}
    
    	wstring wstemp(szPath);
    
    	do
    
    	{
    
    		if(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    
    		{
    
    			if(fd.cFileName[0]!=_T('.'))
    
    				q.push(wstemp+_T("\\")+fd.cFileName+_T("\\*"));			
    
    		}
    
    		else
    
    		{
    
    			li.HighPart = fd.nFileSizeHigh;
    
    			li.LowPart = fd.nFileSizeLow;
    
    			wcout<<fd.cFileName<<_T(" ")<<li.QuadPart<<_T("bytes")<<endl;
    
    			wof<<fd.cFileName<<_T(" ")<<li.QuadPart<<_T("bytes")<<endl;
    
    		}
    
    	}while(FindNextFile(hd,&fd));//FindNextFile正常终止时,用GetLastError可返回ERROR_NO_MORE_FILES
    
    	FindClose(hd);//不能用CloseHandle
    
    	while(!q.empty())
    
    	{
    
    		wstemp = q.front();
    
    		q.pop();
    
    		hd = FindFirstFile(wstemp.c_str(),&fd);
    
    		if(hd == INVALID_HANDLE_VALUE)
    
    		{
    
    			cout<<"返回无效句柄"<<endl;
    
    			wof.flush();
    
    			wof.close();
    
    			return false;
    
    		}
    
    		wstring wst(wstemp);
    
    		wst.pop_back();//去*
    
    		do
    
    		{
    
    			if(fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
    
    			{
    
    				if(fd.cFileName[0]!=_T('.'))
    
    					q.push(wst+fd.cFileName+_T("\\*"));
    
    			}
    
    			else
    
    			{
    
    				li.HighPart = fd.nFileSizeHigh;
    
    				li.LowPart = fd.nFileSizeLow;
    
    				wcout<<fd.cFileName<<_T(" ")<<li.QuadPart<<_T("bytes")<<endl;
    
    				wof<<fd.cFileName<<_T(" ")<<li.QuadPart<<_T("bytes")<<endl;
    
    			}
    
    		}while(FindNextFile(hd,&fd));
    
    	}
    
    	FindClose(hd);
    
    	wof.flush();
    
    	wof.close();
    
    	return true;
    
    }
  • 相关阅读:
    博客图片上传picgo工具安装配置github图传使用
    安装配置hexo icarus主题配置
    通往远方的道路总是漫长的
    java 关于值引用、地址引用的问题
    Java设计模式の迭代器模式
    Java设计模式の模版方法模式
    vim 常用快捷键(整理版)
    Java设计模式の责任链模式
    Java设计模式の代理模式
    java rmi远程方法调用实例
  • 原文地址:https://www.cnblogs.com/qinfengxiaoyue/p/3082988.html
Copyright © 2011-2022 走看看