好库网 好库网首页 | 我的好库
好饱的专栏

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

发布者:好饱
发布日期:2012/8/10 23:19:23   更新日期:2012/8/10 23:21:56
阅读次数:8105
评分:4.80
介绍:递归有其劣势,会遭到某些人的歧视,这里给出递归,非递归两种方案。
正文:

 

一、递归方式遍历目录

 

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

 


评论 [发表评论]
账号 密码 还没帐号呢,现在注册一个?

免责声明:好库网所展示的信息由买卖双方自行提供,其真实性、准确性和合法性由信息发布人负责。好库网不提供任何保证,并不承担任何法律责任。