Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
 Аватар для Etrimus
399 / 366 / 54
Регистрация: 23.05.2010
Сообщений: 716
1

Поиск файлов. Защищенные файлы.

05.12.2010, 19:29. Показов 1463. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, возник вопрос.
Этот фрагмент кода перебирает все файлы во всех папках в диске С и выдаёт файлы с именем file.txt. И как только наталкивается на системную директорию (в моём случае на "C:\System Volume Information"), выдаёт исключение. Я заключил код в блоки try/catch, но это не помогает, ведь поиск обрывается на первой же защищённой паке. Нельзя ли исключить эти каталоги из поиска? Или для этого придётся отказаться от использования метода CurrDir.GetFiles("qip.exe", SearchOption.AllDirectories)?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            DirectoryInfo CurrDir = new DirectoryInfo("C:\\");
            FileInfo[] needFiles;
            try
            {
                needFiles = CurrDir.GetFiles("file.txt", SearchOption.AllDirectories);
                for(int i = 0; i < needFiles.Length; i++)
                {
                    listBox1.Items.Add(needFiles[i]);
                }
            }
            catch
            {
                listBox1.Items.Add("ERROR");
            }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.12.2010, 19:29
Ответы с готовыми решениями:

Поиск файлов на всех дисках (+скрытые файлы и папки)
Доброго времени суток. Хотелось бы написать программу для поиска файлов и папок на всех дисках,...

Невозможно явно декларировать элементы, которые определены в пространстве имен, как частные, защищенные или защищенные внутренние
Приветствую! В общем ошибка такая: Ошибка 1 Невозможно явно декларировать элементы, которые...

Поиск файлов выдает удаленные файлы
Всем привет. У меня есть один код, который ищет файлы определенного рода: procedure...

Поиск файлов с помощью FindFirst и FindNext дает лишние файлы
Всем привет!!! Столкнулся с такой ситуацией, что в FindFirst, FindNext попадают лишние файлы ......

4
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8722 / 3674 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
05.12.2010, 19:50 2
Отказываться. Используй рекурсию.
0
 Аватар для Etrimus
399 / 366 / 54
Регистрация: 23.05.2010
Сообщений: 716
05.12.2010, 20:20  [ТС] 3
Спасибо за однозначный ответ. Мда, а с рекурсией толком и не получается. Будем пробовать.

Добавлено через 25 минут
Может ли кто-то хоть примерно описать на словах алгоритм работы такого метода, уже не первый день пытаюсь, и всё неудачи?...
Я сначала получаю список типа DriveInfo, в котором у меня все локальные диски. Затем я создаю метод, который циклом проходит по всем этим дискам. И вот внутри тела цикла я так понимаю, должен быть рекурсивный метод.
Не может ли кто-то подсказать, что он должен принимать? И возвращать?
0
 Аватар для chaleureux
25 / 28 / 19
Регистрация: 24.12.2014
Сообщений: 1,259
28.06.2019, 11:07 4
Etrimus, Нашли решение?
0
1296 / 876 / 258
Регистрация: 08.08.2014
Сообщений: 2,514
28.06.2019, 12:02 5
Рекурсивный вариант обхода указанной директории по всей глубине со скипом проблемных каталогов (нет доступа, слишком длинный путь). Чуть другой подход - передавать на вход 'List', в который будет дописываться результат (но мне не нравится, когда входные параметры модифицируются):
Кликните здесь для просмотра всего текста
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
        private static List<string> ScanDirectory(string dir)
        {
            var result = new List<string>();
 
            //Console.WriteLine("scan directory: " + dir);
 
            try
            {
                foreach (var subDir in Directory.GetDirectories(dir))
                {
                    result.AddRange(ScanDirectory(subDir));
                }
 
                foreach (var file in Directory.GetFiles(dir))
                {
                    result.Add(file);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine($"Skip directory with '{e.GetType().Name}': {dir}");
            }
 
            return result;
        }

Вариант вызова для обхода всех локальных дисков:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
            var allFiles = new List<string>();
 
            foreach (var drive in DriveInfo.GetDrives().Where(drive => drive.DriveType == DriveType.Fixed))
            {
                allFiles.AddRange(ScanDirectory(drive.RootDirectory.FullName));
            }
0
28.06.2019, 12:02
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.06.2019, 12:02
Помогаю со студенческими работами здесь

Выполнить поиск файлов на всем диске и вывести найденные файлы в listview
Здравствуйте, у меня проблемы с курсовой. Необходимо выполнить поиск файлов на всем диске и вывести...

Чтение файлов, запись и дозапись в файл, поиск файлов в каталоге и поиск данных в файле
2. Создать файлы, в которых будут вмещаться строки с именами студентов и их средними балами. Каждый...

файлы.Создать файлы f и g, компонентами которых являются целые случайные числа. Записать в файл h все совпадающие компоненты файлов f и g.
Создать файлы f и g, компонентами которых являются целые случайные числа. Записать в файл h все...

Я восстановил файлы с форматированного диска, но в одной папке около 30000 файлов, как перенести по 500 файлов в папки?
И как это все сделать ? Вот нашел какой то скрипт в интернете, якобы по 30 файлов перемещает в...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Как проверить, что файл НЕ существует с помощью Bash
bytestream 25.01.2025
В системном администрировании проверка существования файлов является фундаментальной операцией, особенно при написании скриптов на Bash. Правильная обработка ситуаций, когда файл отсутствует,. . .
Как проверить, что строка пустая, неопределена или null в JavaScript
bytestream 25.01.2025
При разработке веб-приложений на JavaScript разработчики регулярно сталкиваются с необходимостью проверки строковых значений на различные состояния. Валидация данных является критически важным. . .
Как проверить существование ключа в объекте или массиве в JavaScript
bytestream 25.01.2025
При разработке веб-приложений на JavaScript программисты постоянно сталкиваются с необходимостью работать с объектами и массивами. Эти структуры данных являются фундаментальными элементами языка и. . .
Как создать ArrayList из массива (array) в Java
bytestream 25.01.2025
При разработке программного обеспечения на языке Java программисты часто сталкиваются с необходимостью эффективного управления наборами данных. Массивы и ArrayList являются двумя фундаментальными. . .
Как сгенерировать случайные целые числа (int) в указанном диапазоне в Java
bytestream 25.01.2025
В программировании генерация случайных чисел является важнейшим инструментом для решения множества практических задач. От создания игровых механик до реализации алгоритмов машинного обучения, от. . .
Как сделать, чтобы grep выводил строки до и после найденной
hw_wired 25.01.2025
Утилита grep стала незаменимым инструментом для поиска и фильтрации информации в Unix-подобных операционных системах. Эта командная утилита позволяет осуществлять поиск строк, соответствующих. . .
Как клонировать определенную ветку в Git
bytestream 24.01.2025
Одной из ключевых функций Git является возможность клонирования веток, что позволяет создавать локальные копии удаленных репозиториев и работать с определенными версиями проекта. Этот механизм. . .
Как в цикле обойти строки DataFrame в Pandas Python
bytestream 24.01.2025
DataFrame представляет собой одну из основных структур данных в библиотеке Python Pandas, которая организует информацию в виде двумерной таблицы с строками и столбцами. Эта структура данных особенно. . .
Как получить имя текущей ветки в Git
bytestream 24.01.2025
При работе с Git часто возникает необходимость определить имя текущей ветки, в которой ведется разработка. Знание текущей ветки является критически важным аспектом для эффективного управления. . .
Как отсортировать массив объектов по значению поля объекта в JavaScript
bytestream 24.01.2025
При разработке веб-приложений на JavaScript разработчики часто сталкиваются с необходимостью работать с массивами объектов. Эти структуры данных представляют собой упорядоченные наборы элементов, где. . .
Ошибка "src refspec master does not match any" при пуше коммита в Git
bytestream 24.01.2025
При работе с системой контроля версий Git разработчики нередко сталкиваются с различными ошибками, одной из которых является сообщение "src refspec master does not match any". Эта ошибка возникает. . .
Как округлить не более двух цифр после запятой в JavaScript
bytestream 24.01.2025
При работе с числами в JavaScript разработчики часто сталкиваются с необходимостью округления десятичных значений до определенного количества знаков после запятой. Это особенно важно при работе с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru