搜索目录里所有文件(包括子目录)
生活随笔
收集整理的這篇文章主要介紹了
搜索目录里所有文件(包括子目录)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
搜索目錄里所有文件(包括子目錄)
資料來源:http://www.cnblogs.com/jjwwww/archive/2004/09/04/39559.aspx
用到兩個函數(shù)ParseDirectory 和CreatePathList
????????????????{????
????????????????????string[]?dirs?=?Directory.GetDirectories(path);//得到子目錄
????????????????????IEnumerator?iter?=?dirs.GetEnumerator();
????????????????????while(iter.MoveNext())
????????????????????{
????????????????????????string?str?=?(string)(iter.Current);
????????????????????????ParseDirectory(str,?filter);
????????????????????}
????????????????????string[]?files?=?Directory.GetFiles(path,?filter);
????????????????????if(files.Length?>?0)
????????????????????{
????????????????????????m_numFiles?+=?files.Length;
????????????????????????m_pathList.Add(files);
????????????????????}
}
string[]?CreatePathList()
????????????????{
????????????????????if(m_numFiles?<=?0)
????????????????????{
????????????????????????return?null;
????????????????????}
????????????????????string[]?str?=?new?string[m_numFiles];
????????????????????int?index?=?0;
????????????????????try
????????????????????{
????????????????????????IEnumerator?pathIter?=?m_pathList.GetEnumerator();
????????????????????????while(pathIter.MoveNext())
????????????????????????{
????????????????????????????string[]?ar?=?(string[])(pathIter.Current);
????????????????????????????IEnumerator?fileIter?=?ar.GetEnumerator();
????????????????????????????while(fileIter.MoveNext())
????????????????????????????{
????????????????????????????????str[index]?=?(string)(fileIter.Current);
????????????????????????????????++index;
????????????????????????????}
????????????????????????}
????????????????????}
????????????????????catch(Exception?e)
????????????????????{
????????????????????????return?null;
????????????????????}
????????????????????return?str;
????????????????}
#?非遞歸實現(xiàn)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文件
string?path="d:\\";????//目錄名 也可以用相當(dāng)路徑
string?filter="*.mp3";????????//文件類型
?int?m_numFiles=0;????????//文件總數(shù)
?ArrayList?m_pathList?=?new?ArrayList();//包含所有文件路徑的數(shù)組
string[]?files;????????????//所有文件名
????????????????
ParseDirectory(path,?"*.mp3");
files=CreatePathList();????????//生成文件名數(shù)組
????????????????if(files?==?null)
????????????????{
????????????????????throw?new?Exception(String.Concat("No?file?found?in?",?path));
????????????????}
轉(zhuǎn)載于:https://www.cnblogs.com/soldier/archive/2004/09/06/40148.html
總結(jié)
以上是生活随笔為你收集整理的搜索目录里所有文件(包括子目录)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 批处理程序实例
- 下一篇: android中常见的回调模式