Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
1

Как быстро обойти директории и получить файловое дерево?

10.07.2016, 01:29. Показов 2988. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеет ли смысл использовать параллелизм? Некоторые говорят, что параллелизм бредово использовать для таких целей.
В C# конечно есть готовое решение в виде Directory.EnumerateFiles, но если возникнут какие-то проблемы(Например, прав не будет),то я вообще не получу каких-либо элементов коллекции и поэтому, я думаю, что нужно ручками обходить.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.07.2016, 01:29
Ответы с готовыми решениями:

Вытащить всё файловое дерево
Добрый вечер. Пытаюсь вытащить путь каждого файла всего файлового дерева в выбранной папке. Но...

Как обойти дерево?
Создал каталог, дерево имеет кучу братьев и сестер( тоесть не по два узла, а больше) , разная...

Как обойти дерево файловой системы БЕЗ рекурсии
Подскажите как обойти дерево файловой системы на заданную глубину БЕЗ рекурсии, и найти элементы...

Как обойти контролы и получить (установить) в них значения
Здравствуйте. Имеется форма с двумя groupBox. В одном из groupBox находится восемь numericUpDown....

9
Эксперт .NET
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
10.07.2016, 03:45 2
iluxa1810, используй версию Directory.EnumerateFiles, которая не просматривает вложенные папки. Такая версия кинет исключение только, если нет доступа к указанному пути. Паралелить это дело не рекомендую, так как производительность упирается в пропускную способность самого диска и добавление потоков тут ничего не изменит (в лучшую сторону).
0
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
10.07.2016, 12:38  [ТС] 3
Usaga, Т.е руками обходить папки и вызывать Directory.EnumerateFiles?
А еще вот есть GetFiles. Нужели он медленнее?
0
Эксперт .NET
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
10.07.2016, 12:58 4
Цитата Сообщение от iluxa1810 Посмотреть сообщение
Т.е руками обходить папки и вызывать Directory.EnumerateFiles?
Да. Это не сложно.

Цитата Сообщение от iluxa1810 Посмотреть сообщение
А еще вот есть GetFiles. Нужели он медленнее?
Он не медленнее. GetFiles возвращает готовый массив строк (который занимает память и который нужно будет сборщику мусора собрать), а EnumerateFiles возвращает итератор (IEnumerable<string>), через который эти строки можно получать по мере надобности, не храня весь список файлов в память.
0
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
10.07.2016, 21:14  [ТС] 5
Usaga, Вопрос, а тоже самое с директориями сделать можно?
Вот в этом месте у меня вылетает
An unhandled exception of type 'System.UnauthorizedAccessException' occurred in mscorlib.dll

Additional information: Access to the path 'D:\$RECYCLE.BIN\S-1-5-18' is denied.
C#
1
2
3
4
    foreach (var dir in Directory.EnumerateDirectories(pathToFolder,"*",SearchOption.TopDirectoryOnly)) //<--
            {
                TraversalFolders(setting, dir);
            }
Добавлено через 7 минут
Я обернул в Try/Catch и ,вроде, помогло, но можно ли обходить такие директории?
0
Эксперт .NET
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
11.07.2016, 04:14 6
Цитата Сообщение от iluxa1810 Посмотреть сообщение
можно ли обходить такие директории?
Только, если приложение запущено с соответствующими привилегиями. В противном случае на что годились бы все эти аккаунты\пароли, если бы любое приложение могло спокойно получить ко всему доступ?))
0
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
11.07.2016, 20:05  [ТС] 7
Usaga, Под "обходить" я понимал, вообще в них не суваться и идти мимо.
0
Эксперт .NET
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
12.07.2016, 05:11 8
Цитата Сообщение от iluxa1810 Посмотреть сообщение
Под "обходить" я понимал, вообще в них не суваться и идти мимо.
Ну так, если ты исключение словил, то это как бы признак того, что тебе в эту папку не надо Можно, конечно, у каждой папки права проверять перед тем, как пытаться в неё лезть, но только зачем?)))
0
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
13.07.2016, 00:04  [ТС] 9
Usaga, А имеет смысл параллелить при работе с сетевой папкой?
Я недавно узнал, что тот же Total Commander при копировании из сети на локальный диск использует не весь интернет канал. Если поставить копирование с этой же сетевой шары на еще 1 диск, то только в этом случае канал забивается целиком.
0
Эксперт .NET
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
13.07.2016, 07:02 10
iluxa1810, за каналом стоит обычный жёсткий диск. Не насилуй его
0
13.07.2016, 07:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.07.2016, 07:02
Помогаю со студенческими работами здесь

Как быстро получить основы visual basic 6.0 ?
Всем доброго дня! Задача такова ... необходимо как можно быстрее освоить vb.До этого никогда с ним...

Как быстро получить максимальный уровень громкости MP3 файла
Друзья, подскажите пожалуйста, как быстро узнать максимальный уровень громкости MP3 файла? Мне это...

Как быстро получить цвет пикселя с любой точки экрана
Пробовал так: #region DLLImport public static extern IntPtr GetDC(IntPtr hwnd);...

Обойти бинарное дерево в прямом, симметричном и обратном порядке
здраствуйте у меня есть небольшая проблемка мне надо обойти бинарное дерево в прямом,...


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

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