【发布时间】:2018-04-02 21:18:38
【问题描述】:
foreach(DriveInfo d in DriveInfo.GetDrives().Where(x => x.IsReady == true))
{
try
{
string[] files = Directory.GetFiles(d.RootDirectory.ToString(), fileName, SearchOption.AllDirectories);
foreach(string file in files)
{
Console.WriteLine(file);
}
}
catch(exception ex)
{
}
}
看起来很简单,除了我不断收到System.unauthorizedaccessexception。
所以我尝试编写一个 linq 语句来检查所有没有系统标志的文件并将其返回到一个列表中。
var folderFound = new DirectoryInfo(d.RootDirectory.ToString())
.GetFiles()
.Where(f => !f.Attributes.HasFlag(FileAttributes.System) && f.Name == fileName)
.Select(f => f.Name)
.ToList();
但它的工作并不完全正确。它也不会检查所有目录。我该如何解决我的问题?
我没有解决我的问题无法使用 linq 语句
foreach(DriveInfo d in DriveInfo.GetDrives().Where(x => x.IsReady == true))
{
Stack<DirectoryInfo> dirstack = new Stack<DirectoryInfo>();
dirstack.Push(new DirectoryInfo(d.RootDirectory.ToString()));
while(dirstack.Count > 0)
{
DirectoryInfo current = dirstack.Pop();
foreach (DirectoryInfo di in current.GetDirectories())
{
if((di.Attributes & FileAttributes.System) != FileAttributes.System)
{
dirstack.Push(di);
}
}
foreach (FileInfo f in current.GetFiles())
{
if (f.Name == fileName)
{
fList.Add(f);
}
}
}
我正在尝试下面的 cmets 中的那个,但是一旦我点击了
var dirs = di.EnumerateDirectories();
它正在抛出 System.UnauthorizedAccessException。如果我有操纵能力,我什至没有阅读能力。是我对正在发生的事情的猜测。
【问题讨论】:
-
除非这是一个学习练习,否则有专门做这类事情的工具。结帐索引搜索工具。
标签: c# linq directoryinfo