我的位置: 首頁 > 學習專區 > .NET技術 > 遍歷系統所有文件的兩種方法(遞歸遍歷/堆棧遍歷)

遍歷系統所有文件的兩種方法(遞歸遍歷/堆棧遍歷)

2014-04-28 12:00:10
來源:
[導讀] A 遞歸方法using System;public class RecursiveFileSearch{static System Collections Specialized StringCollection log = new S
A.遞歸方法

using System;

public class RecursiveFileSearch

{

static System.Collections.Specialized.StringCollection log = new System.Collections.Specialized.StringCollection();

static void Main()

{

// 檢測邏輯盤符

string[] drives = System.Environment.GetLogicalDrives();

foreach (string dr in drives)

{

System.IO.DriveInfo di = new System.IO.DriveInfo(dr);

//跳過沒有就緒的盤

if (!di.IsReady)

{

Console.WriteLine("The drive {0} could not be read", di.Name);

continue;

}

System.IO.DirectoryInfo rootDir = di.RootDirectory;

WalkDirectoryTree(rootDir);//遞歸

}

// 未能成功瀏覽的文件(權限不夠等原因)

Console.WriteLine("拒絕訪問的有:");

foreach (string s in log)

{

Console.WriteLine(s);

}

Console.ReadKey();

}

static void WalkDirectoryTree(System.IO.DirectoryInfo root)

{

System.IO.FileInfo[] files = null;

System.IO.DirectoryInfo[] subDirs = null;

//遍歷目錄下的所有文件夾

try

{

files = root.GetFiles("*.*");

}

//拒絕訪問導致的異常

catch (UnauthorizedAccessException e)

{

log.Add(e.Message);

}

//文件殘缺

catch (System.IO.DirectoryNotFoundException e)

{

Console.WriteLine(e.Message);

}

if (files != null)

{

foreach (System.IO.FileInfo fi in files)

{

//打印本目錄下所有文件名(不含文件夾)

Console.WriteLine(fi.FullName);

}

// 獲取子文件夾集合

subDirs = root.GetDirectories();

foreach (System.IO.DirectoryInfo dirInfo in subDirs)

{

//遞歸調用本方法應用于于子文件夾

WalkDirectoryTree(dirInfo);

}

}

}

}

復制代碼

遞歸方法很簡潔,但如果目錄樹很大且嵌套很深,則有可能會引起堆棧溢出異常。

評論
熱點專題
>>
相關文章推薦
>>
好吊妞免费视频在线观看,久久亚洲国产人成综合网,久久精品国产2020,欧美精品综合在线
亚洲午夜成人福利精品视频 | 有亚洲成影院ckck | 日韩欧美亚洲一区精品 | 在线观看国产一区二三区 | 热久久这里只有精品 | 亚洲欧美日韩、中文字幕不卡 |