海海日记-冯海滨博客

您现在的位置是:首页 > C# > 正文

C#

c#采用递归非递归两种方式遍历目录下所有文件

happyfhb2012-12-30C#1444

 经典中的经典。

 

一 递归遍历

参考:http://www.fenghaibin.com/post/1025.html

也可以使用这种方法

public void GetFiles1(string pathname)     
{         
    string[] subFiles = Directory.GetFiles(pathname);         
    foreach (string subFile in subFiles)         
    {             
        Console.WriteLine(subFile);         
    }          
               
    string[] subDirs = Directory.GetDirectories(pathname);         
    foreach (string subDir in subDirs)         
    {            
        GetFiles1(subDir);         
    }     
}

 

二 非递归 在这里重点感谢 http://www.okbase.net/doc/details/2583 的作者 我在此作者基础上增加了 对无法访问目录的try 即使遇到不可访问目录也可以轻松跳过

//此函数采用非递归方式遍历问题 是所有中最好的遍历方法     
public void GetAllDirList(string pathname)     
{     
    Stack<string> skDir = new Stack<string>();       
    skDir.Push(pathname);     
    while (skDir.Count > 0)     
    {     
        pathname = skDir.Pop();     
        try
        {     
            string[] subDirs = Directory.GetDirectories(pathname);     
            string[] subFiles = Directory.GetFiles(pathname);     
            if (subDirs != null)     
            {     
                for (int i = 0; i < subDirs.Length; i++)     
                {                   
                    skDir.Push(subDirs[i]);     
                }     
           
                if (subFiles != null)     
                {     
                    for (int i = 0; i < subFiles.Length; i++)     
                    {                    
                        listBox1.Items.Add(subFiles[i]);     
                    }     
                }     
            }     
        }     
        catch (Exception ex) { }// 捕抓错误 什么都不做     
                        
    }     
}

 

平淡中储蓄成长

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~