Поиск файлов по маске с игнорированием закрытых для доступа папок - C#

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

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

Привет. Написал вот так, а оно доходит до папки system volume information и ошибка - Отказано в доступе по пути "d:\System Volume Information". Как это можно поправить? Код:
 DirectoryInfo dir = new DirectoryInfo(@"d:\");
           
                foreach (FileInfo file in dir.GetFiles("*.exe", SearchOption.AllDirectories))
                {
                    listBox1.Items.Add(file.DirectoryName + file.Name);
                }
нашел в сети:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
 
namespace ConsoleApplication1
{
    public class Find
    {
        public void FindInDir(DirectoryInfo dir, string pattern, bool recursive)
        {
            try
            {
                foreach (FileInfo file in dir.GetFiles(pattern))
                {
                    Console.Out.WriteLine(file.FullName);
                }
            }
            catch (UnauthorizedAccessException)
            {
            }
 
            if (recursive)
            {
                DirectoryInfo[] subdir = dir.GetDirectories();
                int i;
                int l = subdir.Length;
                for (i = 1; i < l; i++)
                {
                    try
                    {
                        this.FindInDir(subdir[i], pattern, recursive);
                    }
                    catch (UnauthorizedAccessException)
                    {
                        Console.Out.WriteLine("Отказанно в доступе " + subdir[i].Name);
                    }
                }
            }
        }
        public void FindFiles(string dir, string pattern)
        {
            this.FindInDir(new DirectoryInfo(dir), pattern, true);
        }
 
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            //проверка указанного каталога, чтобы исключить ошибку доступа в самом начале
            string a = @"Z:\";
            DirectoryInfo b = new DirectoryInfo(a);
            try
            {
                DirectoryInfo[] test = b.GetDirectories();
            }
            catch (UnauthorizedAccessException)
            {
                Console.Out.WriteLine("В поиске отказанно директория не доступна\nPress any key");
                Console.ReadKey();
                Environment.Exit(0);
            }
 
            Find f = new Find();
            f.FindFiles(a, "*.avi");
            Console.Out.WriteLine("Press any key");
            Console.ReadKey();
        }
    }
}
Перенес код на форму. Вот только есть проблема, как вывести названия файлов в listbox? Пробовал так, не то. :
Find f = new Find();
            f.FindFiles(a, "*.avi");
            listBox1.Items.Add(f);
Код скопирован со стороннего форума. Автор кода:

SL@y

(Примечание Памирыч)

Решение задачи: «Поиск файлов по маске с игнорированием закрытых для доступа папок»

textual
Листинг программы
bool FindFiles(string path, string pattern, StringCollection listFiles) {
 string []fileNames=Directory.GetFiles(path, pattern, SearchOption.TopDirectoryOnly);
 fileNames.All(x => AddFileNameInListFiles(x, listFiles));
 return true; }

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


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

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

11   голосов , оценка 3.727 из 5