По-началу всё было волшебно. Но потом оказалось, что если поиск натыкается на файлы/папки, к которым нет доступа, то происходит экскепшен. Нафига ему доступ, чтобы просто прочитать имя?
В интернете предлагают либо использовать монструозный код WinAPI, либо методы с try, которые не похоже что работают.
Однако,
тут код более простой и папка System Volume Information отображается
Но я не вижу строчки, осуществляющие поиск И вообще, весь этот код выглядит как чёрная магия.
public static IEnumerable<string> GetFiles(string root, string searchPattern)
{
Stack<string> pending = new Stack<string>();
pending.Push(root);
while (pending.Count != 0)
{
var path = pending.Pop();
string[] next = null;
try
{
next = Directory.GetFiles(path, searchPattern);
}
catch { }
if(next != null && next.Length != 0)
foreach (var file in next) yield return file;
try
{
next = Directory.GetDirectories(path);
foreach (var subdir in next) pending.Push(subdir);
}
catch { }
}
}
и
try
{
string[] fileNames = Directory.GetFiles(sDir);
// Do whatever you want with fileNames
}
catch (UnauthorizedAccessException)
{
// Code here will be hit if access is denied. You can also
// leave this empty to ignore the error.
}
и
foreach(string filePath in Directory.GetFiles(blah))
{
try
{
//do something with file
}
catch(UnauthorizedAccessException ex)
{
//create an exception if needed (you can create a messageBox, or nothing)!
}
}
разве будет работать? Последнее точно не будет.
Но ведь, например, на WinAPI (FindFirstFile()FindNextFile()) для чтения имени System Volume Information не нужны права А тут они, внезапно, понадобились
чОрт! Похоже, я опять куда-то не туда посмотрел
Я, почему-то, был уверен, что экскепшен возникает уже на GetDirectories() и GetFiles() С чего я это взял и как так получилось, я вообще хз