hur.cn - 华软网

 热门搜索

为什么我遍历了子文件后,程序就不在遍历下一个文件夹了?

  作者:未知    来源:网络    更新时间:2011/9/30
          CFileFind finder;
CString   strWildcard(pFileName); 
CString   strWild=strWildcard;
CString strFile;

      strWildcard   +=   _T( "\\*.*"); 

BOOL bWorking = finder.FindFile(strWildcard);第一个文件夹
while (bWorking)
     {

      bWorking = finder.FindNextFile();
  if(finder.IsDots())continue;

  else if(finder.IsDirectory())
 {
 CString   str   =   finder.GetFilePath(); 
 CString   ftr   =   finder.GetFileName();
           //MessageBox(str);这里我试了下可以显示两个子文件夹名字;
          BOOL bWorki = finder.FindFile(str+= _T( "\\*.BLK"));但是这里遍历下 就只能遍历第一个子文件夹的内容了
 while(bWorki)
          {
               bWorki= finder.FindNextFile();

.              .CString   strrin   =   finder.GetFilePath(); 
                 //MessageBox(strrin);这里怎么试都只能出现第一个子文件夹的文件名字               .
           }
          finder.Close();
        }
       else...........

---华软 网友回答---
单步调试下,应该是findnextfile()不成功
---华软网友回复---
饿 我这里 调试不出来 ,我试了下 那里能显示两个子文件夹名字,应该findnextfile()是成功的
---华软网友回复---
*.BLK 不知道这是干啥
不过这地方如果指定文件类型的话,只能在本目录中遍历
---华软网友回复---
递归方式搜索文件 .
---华软网友回复---
*.BLK 这个我是  指定搜索 子文件夹文件的类型(里面没有文件夹了), 在父文件夹里还有子文件夹呀 ,它就不在 遍历其他子文件夹了

---华软网友回复---
子文件夹里 就只有文件了,所以我就没有用递归了,只是想让父文件夹能够一个一个的读取子文件夹的内容,现在就是只能执行一个文件夹的内容,其他子文件夹的内容就不读取了,程序就跳过执行else..了
---华软网友回复---
finder找完最后一级文件夹后你是怎么返回上一级的,好象没有返回父文件夹吧
---华软网友回复---
 返回?不是有循环吗?怎么返回?
   while (bWorking)
  {

  bWorking = finder.FindNextFile();
             .
             .
---华软网友回复---
CString str = finder.GetFilePath();  
CString ftr = finder.GetFileName();
  //MessageBox(str);这里我试了下可以显示两个子文件夹名字;
  BOOL bWorki = finder.FindFile(str+= _T( "\\*.BLK"));但是这里遍历下 就只能遍历第一个子文件夹的内容了
;;;这里使finder在第1个子目录中找了,那么在找完第1个子目录后,你是怎么回到父目录找第2个子目录的
---华软网友回复---
在你的代码里就是只在第1个子目录中找啊,你根本就没去找第2个子目录,如果不用递归,父目录和子目录要用2个finder,不能混用

finder1.FindFirstFile();   //父文件夹找第1个
do
{
  //是目录就设定为查找子目录
     finder2.FindFirstFile();   //子目录中找第1个
//处理  
     while(finder2.FindNextFile())//继续找,直到找完

}while(finder1.FindFirstFile())  //继续找父目录
---华软网友回复---
楼主需要理清思路,学学算法
---华软网友回复---
问题出在内外层循环公用一个finder 对象 在执行内层语句finder.Close(); 时外层对象已被关闭了
修改后的代码
C++">
CFileFind finder,findsub;
CString strWildcard("E:\\test");  
CString strWild=strWildcard;
CString strFile;

strWildcard += _T( "\\*.*");  

BOOL bWorking = finder.FindFile(strWildcard);//第一个文件夹
while (bWorking)
{

bWorking = finder.FindNextFile();
if(finder.IsDots())
continue;
else if(finder.IsDirectory())
{
CString str = finder.GetFilePath();  
CString ftr = finder.GetFileName();
//MessageBox(str);这里我试了下可以显示两个子文件夹名字;
BOOL bWorki = findsub.FindFile(str+= _T( "\\*.*"));//但是这里遍历下 就只能遍历第一个子文件夹的内容了
while(bWorki)
{
bWorki= findsub.FindNextFile();
if (!findsub.IsDots()) {
CString strrin = findsub.GetFilePath();  
MessageBox(strrin);//这里怎么试都只能出现第一个子文件夹的文件名字 .
}
}
findsub.Close();
}
else
{
AfxMessageBox("Other way");
}
}
finder.Close();

---华软网友回复---
谢谢, 算法我还真的学的不行,哎      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。