说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

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

HTML文档下载 WORD文档下载 PDF文档下载
递归有其劣势,会遭到某些人的歧视,这里给出递归,非递归两种方案。

 

一、递归方式遍历目录

 

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);	}}

二、非递归方式遍历目录

采用堆栈,将目录压入堆栈实现遍历。

public void GetFiles2(string pathname){	Stack<string> skDir = new Stack<string>();	skDir.Push(pathname);	while (skDir.Count > 0)	{		pathname = skDir.Pop();		string[] subDirs = Directory.GetDirectories(pathname);		string[] subFiles = Directory.GetFiles(pathname);		if (subDirs != null)		{			for (int i = 0; i < subDirs.Length; i++)			{				//string dirName = Path.GetFileName(subDirs[i]);				skDir.Push(subDirs[i]);			}		}		if (subFiles != null)		{			for (int i = 0; i < subFiles.Length; i++)			{				//string fileName = Path.GetFileName(subFiles[i]);				// 处理文件				Console.WriteLine(subFiles[i]);			}		}	}}

调用方式:

GetFiles2("c:\\windows");

 

如果希望在遍历的过程中取得目录或文件的详细信息,可以用DirectoryInfo来代替string:

DirectoryInfo di = new DirectoryInfo(pathname);

DirectoryInfo[] diinfo = di.GetDirectories();

FileInfo[] fiinfo = di.GetFiles();

 

备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘