Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
sedoi_starik
1 / 1 / 2
Регистрация: 13.06.2013
Сообщений: 41
#1

Рекурсивный метод поиска файлов

25.11.2016, 08:47. Просмотров 878. Ответов 4
Метки нет (Все метки)

На одном сайте нашел рекурсивный метод прохода по каталогам и вложенным каталогам на диске. С передачей в функцию полного пути файла.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
static void ApplyAllFiles(string folder, Action<string> AddList)
        {
            foreach (string file in Directory.GetFiles(folder))
            {               
                AddList(file);
            }
            foreach (string subdir in Directory.GetDirectories(folder))
            {
                try
                {
                    ApplyAllFiles(subdir, AddList);
                }
                catch
                {
                    
                }
            }
        }
C#
1
2
3
4
5
6
 static public void AddList(string path)
        {
          //В эту функцию попадает полное имя файла и его место расположения.
          //Можно сделать с файлом например посчитать контрольную сумму.
          Console.WriteLine(MD5Checksumm(path)); 
        }
Подскажите как сделать отбор файлов по маске. Вводим в консоли несколько масок (*.exe, *.sys, *.dll и т.д) и что бы по этим маскам происходила обработка. В функции AddList надо сделать проверку if но вот какое условие должно быть.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2016, 08:47
Ответы с готовыми решениями:

Рекурсивный метод для поиска максимального и минимального элемента массива
Всем привет. Помогите доработать программу: Нужно написать рекурсивный метод...

Рекурсивный и не рекурсивный метод написания кода
Объясните пожалуйста, чем отличаются два таких метода. Желательно с примерами.

Рекурсивный метод
помогите с решением

Рекурсивный метод
Дано натуральное число n. Разработать рекурсивный метод для вывода на экран...

Рекурсивный метод вычиcления F(n)
Функция F(n) определена для целых положительных чисел следующим образом ...

4
Simbiont
27 / 27 / 16
Регистрация: 22.04.2016
Сообщений: 86
25.11.2016, 09:33 #2
ну так Directory.GetFiles возвращает string[], состоящий из имен файлов, которые включают и путь и расширения.
C#
1
2
3
4
5
6
7
8
9
10
11
Console.WriteLine("Введите несколько расширений через пробел");
var m = Console.ReadLine().Split(' ');
 
foreach (string file in Directory.GetFiles(folder))
            {               
               foreach (var exce in m)
                {
                   if (file.SubString(file.LastIndexOf(".")).Contains(exce))              
                            AddList(file);
                 }
            }
0
sedoi_starik
1 / 1 / 2
Регистрация: 13.06.2013
Сообщений: 41
25.11.2016, 10:52  [ТС] #3
Simbiont, это понятно. в переделах функции main.
Если делать так

C#
1
2
3
4
5
6
7
 static void Main(string[] args)
        {
            Console.WriteLine("Введите несколько расширений через пробел");
            string mksF = Console.ReadLine();
            ApplyAllFiles("C:", mksF,  AddList);
            Console.ReadLine();
        }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
static void ApplyAllFiles(string folder, string mskF, Action<string> AddList)
        {
            foreach (string file in Directory.GetFiles(folder))
            {
                foreach (string exec in mskF)
                {
                    if (file.Substring(file.LastIndexOf(".")).Contains(exec))
                        AddList(file);
                }
            }
            foreach (string subdir in Directory.GetDirectories(folder))
            {
                try
                {
                    ApplyAllFiles(subdir, mskF, AddList);
                }
                catch
                {
                    
                }
            }
        }
То ошибка - Error Cannot convert type 'char' to 'string' (foreach (string exec in mskF))
0
Simbiont
27 / 27 / 16
Регистрация: 22.04.2016
Сообщений: 86
25.11.2016, 11:12 #4
Лучший ответ Сообщение было отмечено sedoi_starik как решение

Решение

так вы забыли разделение сплитом по пробелу.
C#
1
2
3
4
5
6
7
8
static void Main(string[] args)
        {
            Console.WriteLine("Введите несколько расширений через пробел");
            string mksFstr = Console.ReadLine();
            var mksF = mksFstr.Split(' ');
            ApplyAllFiles("C:", mksF,  AddList);
            Console.ReadLine();
        }
Добавлено через 1 минуту
Цитата Сообщение от sedoi_starik Посмотреть сообщение
static void ApplyAllFiles(string folder, string mskF, Action<string> AddList)
соответственно на
C#
1
static void ApplyAllFiles(string folder, string[] mskF, Action<string> AddList)
1
sedoi_starik
1 / 1 / 2
Регистрация: 13.06.2013
Сообщений: 41
25.11.2016, 12:50  [ТС] #5
Для тех кто будет повторять:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 static void ApplyAllFiles(string folder, string[] mskF, Action<string> AddList)
        {
            foreach (string file in Directory.GetFiles(folder))
            {
                foreach (var exec in mskF)
                {
                    if (file.Substring(file.LastIndexOf(".")).Contains(exec))
                        AddList(file);
                }
            }
            foreach (string subdir in Directory.GetDirectories(folder))
            {
                try
                {
                    ApplyAllFiles(subdir, mskF, AddList);
                }
                catch
                {
                    
                }
            }
        }
C#
1
2
3
4
5
6
7
static public void AddList(string path)
        {
            //Сделать обработку файлов по маске. Если есть то считать. Если нет то пропустить
            string md5hash;
            md5hash = MD5Checksumm(path);
            Console.WriteLine("{0} {1}",path, md5hash);
        }
C#
1
2
3
4
5
6
7
8
static void Main(string[] args)
        {
            Console.WriteLine("Введите несколько расширений через пробел");
            string mksFstr = Console.ReadLine();
            var mksF = mksFstr.Split(' ');
            ApplyAllFiles("C:", mksF,  AddList);
            Console.ReadLine();
        }
Вводить маску так: dll exe sys ini
0
25.11.2016, 12:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.11.2016, 12:50

Разработать рекурсивный метод
Разработать рекурсивный метод возвращающий значение, нужно найти n-ный член...

Рекурсивный метод печати последовательности 1, 2, 3, … n-1, n, n-1, … 3, 2, 1
Написать рекурсивную функцию, которая для заданного натурального числа n...

Рекурсивный метод сортировки вставками
Подскажите пожалуйста как реализовать &quot;рекурсивный метод сортировки вставками&quot;.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru