列出除c# . net中系统目录中的文件外的所有磁盘和目录中的所有文件

  • 本文关键字:文件 磁盘 net 系统目录 c# .net
  • 更新时间 :
  • 英文 :


我有一个用c#写的程序,它列出了所有目录下的所有文件,除了那些你需要管理权限的文件。它没有错误,但总是给我一个访问拒绝异常,我已经忽略了一个目录。访问被拒绝的异常是针对"C:$Recycle.Bin s -1-5-18"。实际上,我忽略了这个目录,并以管理员权限运行程序,但例外仍然在这里。有人能帮我吗?由于

static void List()
{
List<string> files = new List<string>();
List<string> nofiles = new List<string>();

foreach (var drives in DriveInfo.GetDrives())
{
var filez = Directory.GetFiles(drives.Name,"*",SearchOption.AllDirectories);
foreach (string f in filez)
{
if (f.StartsWith(@"C:Windows"))
{
}
else if (f.StartsWith(@"C:Config.Msi"))
{
}
else if (f.StartsWith(@"C:Program Files"))
{
}
else if (f.StartsWith(@"C:Program Files (x86)"))
{
}
else if (f.StartsWith(@"C:DumpStack.log"))
{
}
else if(f.StartsWith(@"C:$Recycle.BinS-1-5-18"))
{
}
else if(f.StartsWith(@"C:Documents and Settings"))
{
}
else
{
files.Add(f);
}
}
foreach (string fl in files)
{
var c = Path.GetFullPath(fl);
Console.WriteLine(c);
Console.ReadKey();
}
Console.ReadKey();
}
}

直接访问几乎总是以拒绝访问结束,您应该使用枚举选项更精确地指定搜索规则,如下所示:

foreach (var drive in DriveInfo.GetDrives())
{
if (drive.IsReady == false)
{
continue;
}
var filez = Directory.GetFiles(drive.Name, "*", new EnumerationOptions
{
AttributesToSkip = FileAttributes.Hidden | FileAttributes.System,
IgnoreInaccessible = true,
RecurseSubdirectories = true,
ReturnSpecialDirectories = true,
});
// TODO: implement the rest of your code hier ...
}

,其中FileAttributes。隐藏并不是必需的。…希望这对你有帮助!

对于Directory.GetFiles(drives.Name,"*",SearchOption.AllDirectories);,您已经遍历了所有目录。过滤在之后完成,并且仅用于决定是否将目录名(您已经有了!)添加到列表中。

要按照您想要的方式进行过滤,您需要自己实现递归并在每一步捕获异常。

最新更新