遍历某路径的函数 ---- 将路径下 所有的文件保存在全局容器中,以待近一步处理
2011-11-23 09:53
453 查看
// 全局容器 存放所有查到的文件路径
// 执行完毕后,路径下所有的xml文件路径 都保存在全局容器g_xmlFilePath中了
改进1:
改进2:
std::vector <CString> g_xmlFilePath;
// 执行完毕后,路径下所有的xml文件路径 都保存在全局容器g_xmlFilePath中了
FindFileInDir(CString filePath) { std::vector <CString> directoryPath; CString subfilePathtemp; CString subFilePath; WIN32_FIND_DATA fd; ZeroMemory(&fd,sizeof(WIN32_FIND_DATA)); HANDLE hSearch; if (filePath.Right(1)!=_T("\\")) { filePath+=_T("\\"); } filePath+=_T("*"); hSearch=::FindFirstFile(filePath,&fd); if(INVALID_HANDLE_VALUE==hSearch) { AfxMessageBox(L"请正确选择文件夹"); return; } subFilePath=filePath.Left(filePath.GetLength()-1); if((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&!(fd.dwFileAttributes&FILE_ATTRIBUTE_SYSTEM)&&!(fd.dwFileAttributes&FILE_ATTRIBUTE_HIDDEN) && _tcscmp((const TCHAR *)&fd.cFileName, L".") && _tcscmp((const TCHAR *)&fd.cFileName, L"..")&&_tcscmp((const TCHAR *)&fd.cFileName,L"RECYCLER")&&_tcscmp((const TCHAR *)&fd.cFileName,L"System Volume Information")) //文件夹 { subfilePathtemp=subFilePath+fd.cFileName;; directoryPath.push_back(subfilePathtemp);// 将目录放大局部容器变量中 }else{ subfilePathtemp=fd.cFileName; int dotPosition=subfilePathtemp.ReverseFind(L'.'); subfilePathtemp=subfilePathtemp.Right(subfilePathtemp.GetLength()-dotPosition-1); if (subfilePathtemp.Compare(L"xml")==0) { subfilePathtemp=subFilePath+fd.cFileName; g_xmlFilePath.push_back(subfilePathtemp); // 将所查到文件放入全局容器变量中, 这样遍历完所有文件夹后,所有的文件路径都存放在了全局容器中 } } BOOL bFinished=FALSE; while( !bFinished) { if(FindNextFile(hSearch, &fd)) { if((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&!(fd.dwFileAttributes&FILE_ATTRIBUTE_SYSTEM)&&!(fd.dwFileAttributes&FILE_ATTRIBUTE_HIDDEN) && _tcscmp((const TCHAR *)&fd.cFileName, L".") && _tcscmp((const TCHAR *)&fd.cFileName, L"..")&&_tcscmp((const TCHAR *)&fd.cFileName,L"RECYCLER")&&_tcscmp((const TCHAR *)&fd.cFileName,L"System Volume Information")) //文件夹 { subfilePathtemp=subFilePath+fd.cFileName;; directoryPath.push_back(subfilePathtemp); }else{ subfilePathtemp=fd.cFileName; int dotPosition=subfilePathtemp.ReverseFind(L'.'); subfilePathtemp=subfilePathtemp.Right(subfilePathtemp.GetLength()-dotPosition-1); if (subfilePathtemp.Compare(L"xml")==0) { subfilePathtemp=subFilePath+fd.cFileName; g_xmlFilePath.push_back(subfilePathtemp);; } } }else{ if (GetLastError()==ERROR_NO_MORE_FILES) //正常结束 { bFinished=TRUE; }else{ bFinished=TRUE; } } } FindClose(hSearch); //关闭查找 for (int i=0;i<directoryPath.size();i++) //对每一个路径,递归调用 { FindFileInDir(directoryPath.at(i)); } }
改进1:
//----------------------------------------------------------- // // 函数名称:FindFileInDir // // 参 数: // - CString filePath // // - std::vector<CString> &pageVector // // 函数作用:搜索路径filePath下的所有指定的文件 将其放置到页容器中 // // 修改日期:2012年9月12日 By YuJian // //----------------------------------------------------------- void FindFileInDir(CString filePath,std::vector<CString> &pageVector) { std::vector <CString> directoryPath; CString subfilePathtemp; CString subFilePath; WIN32_FIND_DATA fd; ZeroMemory(&fd,sizeof(WIN32_FIND_DATA)); HANDLE hSearch; if (filePath.Right(1)!=_T("\\")) { filePath+=_T("\\"); } filePath+=_T("*"); hSearch=::FindFirstFile(filePath,&fd); if(INVALID_HANDLE_VALUE==hSearch) { AfxMessageBox(L"请正确选择文件夹"); return; } subFilePath=filePath.Left(filePath.GetLength()-1); if((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&!(fd.dwFileAttributes&FILE_ATTRIBUTE_SYSTEM)&&!(fd.dwFileAttributes&FILE_ATTRIBUTE_HIDDEN) && _tcscmp((const TCHAR *)&fd.cFileName, L".") && _tcscmp((const TCHAR *)&fd.cFileName, L"..")&&_tcscmp((const TCHAR *)&fd.cFileName,L"RECYCLER")&&_tcscmp((const TCHAR *)&fd.cFileName,L"System Volume Information")) //文件夹 { subfilePathtemp=subFilePath+fd.cFileName;; directoryPath.push_back(subfilePathtemp);// 将目录放大局部容器变量中 }else{ subfilePathtemp=fd.cFileName; int dotPosition=subfilePathtemp.ReverseFind(L'.'); subfilePathtemp=subfilePathtemp.Right(subfilePathtemp.GetLength()-dotPosition-1); if (subfilePathtemp.Compare(L"tif")==0) { subfilePathtemp=subFilePath+fd.cFileName; pageVector.push_back(subfilePathtemp); // 将所查到文件放入全局容器变量中, 这样遍历完所有文件夹后,所有的文件路径都存放在了全局容器中 } } BOOL bFinished=FALSE; while( !bFinished) { if(FindNextFile(hSearch, &fd)) { if((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&!(fd.dwFileAttributes&FILE_ATTRIBUTE_SYSTEM)&&!(fd.dwFileAttributes&FILE_ATTRIBUTE_HIDDEN) && _tcscmp((const TCHAR *)&fd.cFileName, L".") && _tcscmp((const TCHAR *)&fd.cFileName, L"..")&&_tcscmp((const TCHAR *)&fd.cFileName,L"RECYCLER")&&_tcscmp((const TCHAR *)&fd.cFileName,L"System Volume Information")) //文件夹 { subfilePathtemp=subFilePath+fd.cFileName;; directoryPath.push_back(subfilePathtemp); }else{ subfilePathtemp=fd.cFileName; int dotPosition=subfilePathtemp.ReverseFind(L'.'); subfilePathtemp=subfilePathtemp.Right(subfilePathtemp.GetLength()-dotPosition-1); if (subfilePathtemp.Compare(L"tif")==0) { subfilePathtemp=subFilePath+fd.cFileName; pageVector.push_back(subfilePathtemp);; } } }else{ if (GetLastError()==ERROR_NO_MORE_FILES) //正常结束 { bFinished=TRUE; }else{ bFinished=TRUE; } } } FindClose(hSearch); //关闭查找 for (int i=0;i<directoryPath.size();i++) //对每一个路径,递归调用 { FindFileInDir(directoryPath.at(i),pageVector); } }
改进2:
//----------------------------------------------------------- // // 函数名称:FindFileInDir // // 参 数: // - BOOL bSize 是否判断文件大小 // // - CString fileExtention 文件扩展名,不包括‘.’ // // - CString filePath 文件所在的父目录 // // - std::vector<CString> &pageVector 保存指定文件的容器 // // 返 回:void // // 函数作用:查找目录filePath下,扩展名为FindFileInDir的所有文件 // // 修改日期:2012年9月17日 By YuJian // //----------------------------------------------------------- void FindFileInDir(BOOL bSize,CString fileExtention,CString filePath,std::vector<CString> &pageVector) { std::vector <CString> directoryPath; CString subfilePathtemp; CString subFilePath; WIN32_FIND_DATA fd; ZeroMemory(&fd,sizeof(WIN32_FIND_DATA)); HANDLE hSearch; if (filePath.Right(1)!=_T("\\")) { filePath+=_T("\\"); } filePath+=_T("*"); hSearch=::FindFirstFile(filePath,&fd); if(INVALID_HANDLE_VALUE==hSearch) { AfxMessageBox(L"请正确选择文件夹"); return; } subFilePath=filePath.Left(filePath.GetLength()-1); if((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&!(fd.dwFileAttributes&FILE_ATTRIBUTE_SYSTEM)&&!(fd.dwFileAttributes&FILE_ATTRIBUTE_HIDDEN) && _tcscmp((const TCHAR *)&fd.cFileName, L".") && _tcscmp((const TCHAR *)&fd.cFileName, L"..")&&_tcscmp((const TCHAR *)&fd.cFileName,L"RECYCLER")&&_tcscmp((const TCHAR *)&fd.cFileName,L"System Volume Information")) //文件夹 { subfilePathtemp=subFilePath+fd.cFileName;; directoryPath.push_back(subfilePathtemp);// 将目录放大局部容器变量中 }else{ subfilePathtemp=fd.cFileName; int dotPosition=subfilePathtemp.ReverseFind(L'.'); subfilePathtemp=subfilePathtemp.Right(subfilePathtemp.GetLength()-dotPosition-1); if (subfilePathtemp.Compare(fileExtention)==0) { //subfilePathtemp=subFilePath+fd.cFileName; //pageVector.push_back(subfilePathtemp); // 将所查到文件放入全局容器变量中, 这样遍历完所有文件夹后,所有的文件路径都存放在了全局容器中 if (!bSize) pageVector.push_back(fd.cFileName); else if(fd.nFileSizeLow==466||fd.nFileSizeLow==226) pageVector.push_back(fd.cFileName); } } BOOL bFinished=FALSE; while( !bFinished) { if(FindNextFile(hSearch, &fd)) { if((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&!(fd.dwFileAttributes&FILE_ATTRIBUTE_SYSTEM)&&!(fd.dwFileAttributes&FILE_ATTRIBUTE_HIDDEN) && _tcscmp((const TCHAR *)&fd.cFileName, L".") && _tcscmp((const TCHAR *)&fd.cFileName, L"..")&&_tcscmp((const TCHAR *)&fd.cFileName,L"RECYCLER")&&_tcscmp((const TCHAR *)&fd.cFileName,L"System Volume Information")) //文件夹 { subfilePathtemp=subFilePath+fd.cFileName;; directoryPath.push_back(subfilePathtemp); }else{ subfilePathtemp=fd.cFileName; int dotPosition=subfilePathtemp.ReverseFind(L'.'); subfilePathtemp=subfilePathtemp.Right(subfilePathtemp.GetLength()-dotPosition-1); if (subfilePathtemp.Compare(fileExtention)==0) { if (!bSize) pageVector.push_back(fd.cFileName); else if(fd.nFileSizeLow==466||fd.nFileSizeLow==226) //闪电图的大小 pageVector.push_back(fd.cFileName); } } }else{ if (GetLastError()==ERROR_NO_MORE_FILES) //正常结束 { bFinished=TRUE; }else{ bFinished=TRUE; } } } FindClose(hSearch); //关闭查找 for (int i=0;i<directoryPath.size();i++) //对每一个路径,递归调用 { FindFileInDir(bSize,fileExtention,directoryPath.at(i),pageVector); } }
相关文章推荐
- 使用php scandir()函数遍历文件夹并输出所有文件路径
- 遍历当前目录下所有的.h文件,并将其路径保存到文件中
- 使用php scandir()函数遍历文件夹并输出所有文件路径
- php编程,写一个函数,能够遍历一个文件夹下的所有文件和子文件夹
- C#遍历CookieContainer所有Cookie并保存到文件
- 遍历显示文件夹下所有目录、所有文件的函数
- 遍历指定文件下所有的文件夹和文件的路径,文件名,修改日期,类型
- iOS - 遍历指定路径下的所有文件(不包括更下级文件)
- VB.net遍历路径下的所有文件及所有子文件夹---递归算法
- php遍历文件夹下面的所有文件,得到文件路径
- 遍历一个指定路径下的所有文件
- python 遍历某个路径下的所有图片并将图片路径保存到数组
- PHP采用自定义函数实现遍历目录下所有文件的方法
- 递归遍历某一路径下的所有文件
- PHP采用自定义函数实现遍历目录下所有文件的方法
- 读取文件中的所有图片的路径,保存到txt文件中。
- php 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
- 遍历显示文件夹下所有目录、所有文件的函数,没有分页
- VB.net遍历路径下的所有文件及所有子文件夹---递归算法
- 遍历某路径下的所有文件