13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
|
|
1 | |
Как быстро обойти директории и получить файловое дерево?10.07.2016, 01:29. Показов 2988. Ответов 9
Метки нет (Все метки)
Имеет ли смысл использовать параллелизм? Некоторые говорят, что параллелизм бредово использовать для таких целей.
В C# конечно есть готовое решение в виде Directory.EnumerateFiles, но если возникнут какие-то проблемы(Например, прав не будет),то я вообще не получу каких-либо элементов коллекции и поэтому, я думаю, что нужно ручками обходить.
0
|
10.07.2016, 01:29 | |
Ответы с готовыми решениями:
9
Вытащить всё файловое дерево Как обойти дерево? Как обойти дерево файловой системы БЕЗ рекурсии Как обойти контролы и получить (установить) в них значения |
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
|
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
|
|
10.07.2016, 12:58 | 4 |
Да. Это не сложно.
Он не медленнее. GetFiles возвращает готовый массив строк (который занимает память и который нужно будет сборщику мусора собрать), а EnumerateFiles возвращает итератор (IEnumerable<string> ), через который эти строки можно получать по мере надобности, не храня весь список файлов в память.
0
|
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
|
||||||
10.07.2016, 21:14 [ТС] | 5 | |||||
Usaga, Вопрос, а тоже самое с директориями сделать можно?
Вот в этом месте у меня вылетает
Я обернул в Try/Catch и ,вроде, помогло, но можно ли обходить такие директории?
0
|
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
|
|
11.07.2016, 04:14 | 6 |
Только, если приложение запущено с соответствующими привилегиями. В противном случае на что годились бы все эти аккаунты\пароли, если бы любое приложение могло спокойно получить ко всему доступ?))
0
|
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
|
|
11.07.2016, 20:05 [ТС] | 7 |
Usaga, Под "обходить" я понимал, вообще в них не суваться и идти мимо.
0
|
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
|
|
12.07.2016, 05:11 | 8 |
Ну так, если ты исключение словил, то это как бы признак того, что тебе в эту папку не надо Можно, конечно, у каждой папки права проверять перед тем, как пытаться в неё лезть, но только зачем?)))
0
|
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
|
|
13.07.2016, 00:04 [ТС] | 9 |
Usaga, А имеет смысл параллелить при работе с сетевой папкой?
Я недавно узнал, что тот же Total Commander при копировании из сети на локальный диск использует не весь интернет канал. Если поставить копирование с этой же сетевой шары на еще 1 диск, то только в этом случае канал забивается целиком.
0
|
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
|
|
13.07.2016, 07:02 | 10 |
iluxa1810, за каналом стоит обычный жёсткий диск. Не насилуй его
0
|
13.07.2016, 07:02 | |
13.07.2016, 07:02 | |
Помогаю со студенческими работами здесь
10
Как быстро получить основы visual basic 6.0 ? Как быстро получить максимальный уровень громкости MP3 файла Как быстро получить цвет пикселя с любой точки экрана Обойти бинарное дерево в прямом, симметричном и обратном порядке Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |