C# 无法在所有文件中搜索具有特定名称的文件
这似乎很简单,只是我一直在获取C# 无法在所有文件中搜索具有特定名称的文件,c#,linq,directoryinfo,C#,Linq,Directoryinfo,这似乎很简单,只是我一直在获取System.unauthorizedaccessexception 所以我尝试编写一个linq语句来检查所有没有系统标志的文件,并将其返回到列表中 foreach(DriveInfo d in DriveInfo.GetDrives().Where(x => x.IsReady == true)) { try { string[] files = Directory.GetFiles(d.RootDirectory.ToStr
System.unauthorizedaccessexception
所以我尝试编写一个linq语句来检查所有没有系统标志的文件,并将其返回到列表中
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)
{
}
}
但它并不完全正确。它也不会检查所有目录。我如何解决我的问题
我没有解决我的问题不能使用linq语句
var folderFound = new DirectoryInfo(d.RootDirectory.ToString())
.GetFiles()
.Where(f => !f.Attributes.HasFlag(FileAttributes.System) && f.Name == fileName)
.Select(f => f.Name)
.ToList();
它正在抛出System.UnauthorizedAccessException。如果我有操纵的能力,我甚至连阅读的能力都没有。我猜是怎么回事
var dirs = di.EnumerateDirectories();
更新
试试这个递归方法。在stackoverflow的某个地方找到的。这将捕获并继续保留
var folderFound = new DirectoryInfo(d.RootDirectory.ToString())
.GetFiles("*",SearchOption.AllDirectories)
.Where(f => !f.Attributes.HasFlag(FileAttributes.System) && f.Name == fileName)
.Select(f => f.Name)
.ToList();
公共静态列表GetAllAccessibleFiles(字符串根路径,列表alreadyFound=null)
{
if(alreadyFound==null)
alreadyFound=新列表();
DirectoryInfo di=新的DirectoryInfo(rootPath);
var dirs=di.EnumerateDirectories();
foreach(目录中的目录信息目录)
{
如果(!((dir.Attributes&FileAttributes.Hidden)=FileAttributes.Hidden))
{
alreadyFound=GetAllAccessibleFiles(dir.FullName,alreadyFound);
}
}
var files=Directory.GetFiles(rootPath);
foreach(文件中的字符串s)
{
已找到。添加;
}
返回已找到的文件;
}
System.UnauthorizedAccessException:“对路径“B:\$RECYCLE.BIN\S-1-5-21-745477385-343434684888-2944739576-1003”的访问被拒绝。您应该以管理员身份运行visual studio。”。试试看,让我知道我补充道!f、 attributes.hasflag(fileAttributes.hidden)没有帮助,是因为我也需要文件夹属性吗?以管理员身份运行,这次我收到System.UnauthorizesAccessException。对路径B:\系统卷信息的访问被拒绝。然后我看到一个VisualStudio弹出窗口,说遇到了异常,这可能是由扩展引起的。您可以在appdata roaming activitylog.xml中获得更多信息此代码的目的是什么?如果我们不能阅读特定的文件或文件夹,我们应该跳过吗?可能是重复的,除非这是一个学习练习,有专门做这类事情的工具。签出索引搜索工具。
var folderFound = new DirectoryInfo(d.RootDirectory.ToString())
.GetFiles("*",SearchOption.AllDirectories)
.Where(f => !f.Attributes.HasFlag(FileAttributes.System) && f.Name == fileName)
.Select(f => f.Name)
.ToList();
public static List<string> GetAllAccessibleFiles(string rootPath, List<string> alreadyFound = null)
{
if (alreadyFound == null)
alreadyFound = new List<string>();
DirectoryInfo di = new DirectoryInfo(rootPath);
var dirs = di.EnumerateDirectories();
foreach (DirectoryInfo dir in dirs)
{
if (!((dir.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden))
{
alreadyFound = GetAllAccessibleFiles(dir.FullName, alreadyFound);
}
}
var files = Directory.GetFiles(rootPath);
foreach (string s in files)
{
alreadyFound.Add(s);
}
return alreadyFound;
}