.NET 4.x System.UnauthorizedAccessException при заполнение списка list<> - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, господа профи. Сначала код, потом пояснения.
            try
                {
                
                var dirs = from dir in Directory.EnumerateDirectories(@"D:\", "*", SearchOption.AllDirectories)
                           select dir; 
 
                  foreach (var dir in dirs)
                {
                    listBox1.Items.Add(dir.Substring(dir.LastIndexOf("\\") + 1));
                }
 
                }
            catch (UnauthorizedAccessException ex) { MessageBox.Show(ex.ToString()); }
listBox заполняется. Отказ в доступе к System Volume Information игнорируется и выводится сообщение. Здесь вроде бы всё нормально. Но мне главное заполнить не listBox, а список list<string> из второго примера ниже.
            try
                {
                var dirs = from dir in Directory.EnumerateDirectories(@"D:\", "*", SearchOption.AllDirectories)
                           select dir;
                List<string> allDirs = new List<string>(dirs);
                MessageBox.Show(allDirs[300].ToString());
                }
            catch (UnauthorizedAccessException ex) {Console.Beep(100, 100);}
Выкидывается ошибка: System.UnauthorizedAccessException: Отказано в доступе по пути "D:\System Volume Information\". в System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) в System.IO.FileSystemEnumerableIterator`1.AddSearchableDirsToStack(SearchData localSearchData) в System.IO.FileSystemEnumerableIterator`1.MoveNext() в System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() в System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) Разве в этом случае не происходит игнорирование отказавшей в доступе папки как при заполнении listBox? После передачи dirs в конструктор list<string>() у меня строка, где я хочу посмотреть на 300-ый элемент списка. Но до этого места выполнение кода не доходит. Вместо окна MessageBox я слышу Console.Beep(100, 100) из обработки исключения. Чего бы поправить в этом коде, чтобы список заполнялся нормально?

Решение задачи: «.NET 4.x System.UnauthorizedAccessException при заполнение списка list<>»

textual
Листинг программы
catch (UnauthorizedAccessException) { }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы