loner_li 机试题 通过递归方式访问目录树和通过堆栈方式访问 目录树
来源:互联网 发布:软件开发兼职协议 编辑:程序博客网 时间:2024/06/07 01:25
1. 通过递归方式访问目录树
class RecursiveAccessDirectory
{//声明并实例化一个字符串集合
static System.Collections.Specialized.StringCollection log
= new System.Collections.Specialized.StringCollection();
static void Main()
{
/*
循环访问指定目录下的文件夹
*/
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
DirectoryInfo rootDir = new DirectoryInfo(@"C:\");
WalkDirectoryTree(rootDir);
stopwatch.Stop();
TimeSpan timespan = stopwatch.Elapsed;
Console.WriteLine(timespan.Minutes+"分"+timespan.Seconds+"秒");
Console.ReadLine();
}
static void WalkDirectoryTree(DirectoryInfo root)
{
FileInfo[] files = null;
DirectoryInfo[] subDirs = null;
try
{
files = root.GetFiles();
}
catch (System.UnauthorizedAccessException e)
{
log.Add(e.Message);
}
catch(System.IO.DirectoryNotFoundException e)
{
Console.WriteLine(e.Message);
}
if (files!=null)
{
foreach (FileInfo fi in files)
{
Console.WriteLine("{0}:{1}{2}",fi.FullName,fi.Length,fi.CreationTime);
}
subDirs = root.GetDirectories();
foreach (DirectoryInfo dirInfo in subDirs)
{
WalkDirectoryTree(dirInfo);
}
}
}
}
2.通过堆栈方式访问 目录树
static void Main(string[] args)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
TraverseTree(@"D:\兴华\");
stopwatch.Stop();
TimeSpan timespan = stopwatch.Elapsed;
Console.WriteLine("执行时间为:{0}分{1}秒{2}毫秒", timespan.Minutes, timespan.Seconds, timespan.Milliseconds);
Console.Read();
}
public static void TraverseTree(string root)
{
Stack<string> dirs = new Stack<string>(20);
if (!Directory.Exists(root))
{
throw new ArgumentException();
}
dirs.Push(root);
while (dirs.Count > 0)
{
string currDir = dirs.Pop();
string[] subDirs;
try
{
subDirs = Directory.GetDirectories(currDir);
}
catch (System.UnauthorizedAccessException e)
{
Console.WriteLine(e.Message);
continue;
}
catch (System.IO.DirectoryNotFoundException e)
{
Console.WriteLine(e.Message);
continue;
}
string[] files = null;
try
{
files = Directory.GetFiles(currDir);
}
catch (System.UnauthorizedAccessException e)
{
Console.WriteLine(e.Message);
continue;
}
catch (System.IO.DirectoryNotFoundException e)
{
Console.WriteLine(e.Message);
continue;
}
foreach (string file in files)
{
if (file != null)
{
FileInfo fi = new FileInfo(file);
var str = string.Format("{0}: {1} {2}", fi.FullName, fi.Length, fi.CreationTime);
Console.WriteLine("{0}: {1} {2}", fi.FullName, fi.Length, fi.CreationTime);
var logfile = @"D:\兴华\liang.txt";
var aFile = new FileStream(logfile, FileMode.OpenOrCreate,FileAccess.Write);
var sw = new StreamWriter(aFile, Encoding.Default);
aFile.Position = aFile.Length;
Encoding encoder = Encoding.Default;
byte[] bytes = encoder.GetBytes(str + "\n");
aFile.Write(bytes, 0, bytes.Length);
sw.Close();
}
}
foreach (string str in subDirs)
{
dirs.Push(str);
}
}
}
- loner_li 机试题 通过递归方式访问目录树和通过堆栈方式访问 目录树
- centos 通过http方式访问本地目录(文件服务器)
- java File 通过递归方式删除文件和目录
- newLISP 递归访问目录树
- 通过.NET访问活动目录
- 通过__file__访问相对目录
- 一、通过.NET Framework访问活动目录
- 二、通过.NET Framework访问活动目录
- 通过apache/nginx禁止访问.svn目录
- 通过HTTP访问本地用户目录
- Apache通过配置端口访问不同目录
- 防止通过域名访问服务器文件目录
- ThinkPHP第二课 框架MVC目录和URL访问方式
- Android通过GET和POST方式访问WCF服务(Json)
- 递归方式创建目录树(多级目录)
- 通过Post方式访问Web页面
- 通过匿名方式访问SAS存储过程
- Windows下通过ODBC方式访问PostgreSQL
- [iOS翻译]《The Swift Programming Language》系列 集合类型(Collection Types)
- Intent各属性
- Peerless
- 80端口被占用 默默的黑手SKYPE
- 也说一下Oracle CPU Time[转]
- loner_li 机试题 通过递归方式访问目录树和通过堆栈方式访问 目录树
- AWR中的时间模型
- 构建高可扩Web架构和分布式系统实战
- inspect模块小技巧
- Algorithm算法
- const 指针
- JBPM6
- 设置滚动条颜色
- jsonp 跨域问题