搜索目录里所有文件(包括子目录)


搜索目录里所有文件(包括子目录)


资料来源:http://www.cnblogs.com/jjwwww/archive/2004/09/04/39559.aspx

用到两个函数ParseDirectory 和CreatePathList


None.gif void  ParseDirectory( string  path,  string  filter)
ExpandedBlockStart.gifContractedBlock.gif                
dot.gif {    
InBlock.gif                    
string[] dirs = Directory.GetDirectories(path);//得到子目录
InBlock.gif
                    IEnumerator iter = dirs.GetEnumerator();
InBlock.gif                    
while(iter.MoveNext())
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
dot.gif{
InBlock.gif                        
string str = (string)(iter.Current);
InBlock.gif                        ParseDirectory(str, filter);
ExpandedSubBlockEnd.gif                    }

InBlock.gif                    
string[] files = Directory.GetFiles(path, filter);
InBlock.gif                    
if(files.Length > 0)
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
dot.gif{
InBlock.gif                        m_numFiles 
+= files.Length;
InBlock.gif                        m_pathList.Add(files);
ExpandedSubBlockEnd.gif                    }

ExpandedBlockEnd.gif}

None.gif string [] CreatePathList()
ExpandedBlockStart.gifContractedBlock.gif                
dot.gif {
InBlock.gif                    
if(m_numFiles <= 0)
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
dot.gif{
InBlock.gif                        
return null;
ExpandedSubBlockEnd.gif                    }

InBlock.gif
InBlock.gif                    
string[] str = new string[m_numFiles];
InBlock.gif                    
int index = 0;
InBlock.gif
InBlock.gif                    
try
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
dot.gif{
InBlock.gif                        IEnumerator pathIter 
= m_pathList.GetEnumerator();
InBlock.gif                        
while(pathIter.MoveNext())
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
dot.gif{
InBlock.gif                            
string[] ar = (string[])(pathIter.Current);
InBlock.gif                            IEnumerator fileIter 
= ar.GetEnumerator();
InBlock.gif                            
while(fileIter.MoveNext())
ExpandedSubBlockStart.gifContractedSubBlock.gif                            
dot.gif{
InBlock.gif                                str[index] 
= (string)(fileIter.Current);
InBlock.gif                                
++index;
ExpandedSubBlockEnd.gif                            }

ExpandedSubBlockEnd.gif                        }

ExpandedSubBlockEnd.gif                    }

InBlock.gif                    
catch(Exception e)
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
dot.gif{
InBlock.gif                        
return null;
ExpandedSubBlockEnd.gif                    }

InBlock.gif
InBlock.gif                    
return str;
ExpandedBlockEnd.gif                }



# 非递归实现re: 搜索目录里所有文件(包括子目录)

void ParseDirectory(string path, string filter)
{
Queue q=new Queue();
q.Enqueue(path);
while(q.Count > 0) {
string path=(string)q.Dequeue();
string[] files = Directory.GetFiles(path,filter);
if(files.Length > 0) {
m_numFiles += files.Length;
m_pathList.Add(files);
}

string[] dirs = Directory.GetDirectories(path);
foreach(string dir in dirs){
q.Enqueue(dir);
}
}
}







使用范例:如果要查找的:d目录下所有mp3文件
None.gif
None.gif
string  path = " d:\\ " ;     // 目录名 也可以用相当路径
None.gif
string  filter = " *.mp3 " ;         // 文件类型
None.gif
  int  m_numFiles = 0 ;         // 文件总数
None.gif
 ArrayList m_pathList  =   new  ArrayList(); // 包含所有文件路径的数组 None.gif
None.gif
string [] files;             // 所有文件名
None.gif
                
None.gifParseDirectory(path, 
" *.mp3 " );
None.giffiles
= CreatePathList();         // 生成文件名数组
None.gif
                 if (files  ==   null )
ExpandedBlockStart.gifContractedBlock.gif                
dot.gif {
InBlock.gif                    
throw new Exception(String.Concat("No file found in ", path));
ExpandedBlockEnd.gif                }

None.gif




转载于:https://www.cnblogs.com/soldier/archive/2004/09/06/40148.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值