С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 15.09.2014
Сообщений: 8
1

Как задать глубину просмотра подпапок при поиске файлов?

03.11.2014, 05:58. Показов 2979. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Друзья,
нигде не могу найти алгоритм поиска файлов с заданной глубиной. Задача - реализовать поиск определенных файлов в определенной папке. Программа может итерационно, на произвольную глубину сканировать все папки, вложенные в папку поиска.

На всю глубину с рекурсией без проблем делается, а если мы хотим например углубляться в поиске не более чем на 2 уровня вложенности? А не на всю глубину.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Блог
03.11.2014, 05:58
Ответы с готовыми решениями:

Как правильно задать исключение определённых OU при поиске в AD?
Коллеги, добрый день. Сделал обработку которая выполняет действие с учеткой пользователя в AD...

Назначить глубину рекурсии при поиске определённого файла
И опять двадцать пять. Пример тут где-то был, но найти не могу. При поиске определенного файла надо...

Зависание программы при поиске файлов (как пользоваться потоками?)
Возникла проблема с программой. При поиске файлов идет большая нагрузка на программу (я так...

Как задать глубину объёма фигуры?
В поле "Вставка" выбираю фигуры, там выбираю и рисую нужную мне фигуру. Потом мне нужно сделать её...

4
8943 / 4855 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
03.11.2014, 07:30 2
Сделай, чтобы метод рекурсии возвращал тебе количество своих вызовов. А нём самом контролируй эти вызовы
0
0 / 0 / 0
Регистрация: 15.09.2014
Сообщений: 8
03.11.2014, 09:10  [ТС] 3
Можно немного подробнее на примере следующего кода?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
private static void recoursesearch(string searchpath, string mask)
        {
            try
            {
                foreach (string dir in Directory.GetDirectories(searchpath))
                {
                    //Console.WriteLine("-----------------" + dir + "-----------------");
                    try
                    {
                        foreach (string s in Directory.GetFiles(dir,mask))
                        {
                            Console.WriteLine(Path.GetFileName(s));
                            //File.Copy(s, Path.Combine(Environment.CurrentDirectory, "Copied_files", Path.GetFileName(s)));
                        }
                    }
                    catch (Exception Error)
                    {
                        Console.WriteLine(Error.Message);
                    }
                    //Рекурсия
                    recoursesearch(dir, mask);
                }
            }
            catch (Exception Error)
            {
                Console.WriteLine(Error.Message);
            }
        }
0
0 / 0 / 0
Регистрация: 15.09.2014
Сообщений: 8
06.11.2014, 16:48  [ТС] 4
Сделал, чтобы возвращал кол-во своих вызовов, получается, что возвращает количество папок, а не глубину. Т.Е. в каждой папке он идет сначала в глубину самой папки, затем переходит на следующую и т.д.

Так можно контролировать, если сначала смотреть первый уровень все папки, затем второй уровень все папки и т.д., может кто подскажет как переписать рекурсию, чтобы она сначала не в глубину шла, а по уровням, сначала все папки первого уровня, затем второго и т.д.?

Можно без рекурсии, в принципе, но покажите пример поиска на заданную глубину, если есть у кого

Добавлено через 16 минут
Можно же это делать через стэк, я так понимаю закидываем в стэк начальную папку, для нее получаем список подпапок, закидываем их в стэк, это первая итерация. Затем для всех папок в стэке получаем подпапки, закидываем их снова в стэк. Только как это реализовать в коде? Буду благодарен за любую помощь в этом вопросе
0
8943 / 4855 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
06.11.2014, 18:01 5
Попробуй так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
private static void recoursesearch(string searchpath, string mask, uint depth, uint count)
    {
        try
        {
            foreach (string dir in Directory.GetDirectories(searchpath))
            {
                //Console.WriteLine("-----------------" + dir + "-----------------");
                try
                {
                    foreach (string s in Directory.GetFiles(dir,mask))
                    {
                        Console.WriteLine(Path.GetFileName(s));
                        //File.Copy(s, Path.Combine(Environment.CurrentDirectory, "Copied_files", Path.GetFileName(s)));
                    }
                }
                catch (Exception Error)
                {
                    Console.WriteLine(Error.Message);
                }
                /// depth — глубина поиска. 0 — поиск только в текущем каталоге
                /// count — итерация поиска
                if (depth == count) return;
                //Рекурсия
                recoursesearch(dir, mask, depth, ++count);
            }
        }
        catch (Exception Error)
        {
            Console.WriteLine(Error.Message);
        }
    }
0
06.11.2014, 18:01
BasicMan
Эксперт
19315 / 2622 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
Блог
06.11.2014, 18:01
Помогаю со студенческими работами здесь

Как узнать имя и путь всех файлов и подпапок находящихся в папке?
Подсажите как можно узнать имя и путь всех файлов и подпапок находящихся в папке.

Total Commander: как включить фильтрацию файлов при "быстром поиске"?
Здравствуйте! В Total Commander 8.х у меня был настроен быстрый поиск файлов так, что при наборе...

Исключение при поиске файлов
Здравствуйте, пишу программу для поиска всех txt файлов на диске. написал программу (код ниже), но...

Феномен, при поиске файлов
Феномен при поиске файло Начинаю искать файлы на диске где установлена операционная система....


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru