GetDirectories 出错的解决方法
我想找到D盘里面所有 "*.pst文件,类似 windows 下的磁盘搜索功能,
using System.IO;
Directory.GetFiles(@"d:\", "*.pst", SearchOption.AllDirectories)
测试环境为win7 提示说 某某目录没有访问权限。
获得文件属性 File.GetAttributes(dir.FullName).ToString() 没有权限访问的将会有 System 、Hidden属性。
于是想到是否可以通过属性来过滤这些文件,因此想到了用递归的思想去遍历所有文件。
还好,在网上居然找到了这个。
http://support.microsoft.com/kb/303974/zh-cn
using System.IO;
using System.Collections;
ArrayList Alist = new ArrayList();
void DirSearch(string sDir)
{
try
{
foreach (string d in Directory.GetDirectories(sDir))
{
foreach (string f in Directory.GetFiles(d, "*.pst"))
{
Alist.Add(f);
}
DirSearch(d);
}
}
catch (System.Exception excpt)
{
Console.WriteLine(excpt.Message);
}
}
GetFileTime("D:\\");
通过递归和直接 找所有的文件,两者都有异常, 区别在于前者的异常,就抛出某个节点的异常, Alist.Add(f); 不会执行,(这里是递归循环哦)循环继续,后者是遇到异常,则赋值操作不能执行,返回null.
也可以通过GetAttributes 来判断,原理类似。