Вопрос Игнорирование запрещенных мест при поиске папок VB.net (1 Viewer)

Кто просматривает этот контент: "Тема" (Всего пользователей: 0; Гостей: 1)


Spectrum735

Житель форума
Форумчанин
Регистрация
21.02.2019
Сообщения
32
Репутация
2
Всем доброго времени суток!
Пытаюсь набросать тут небольшую программу на Visual basic Net, которая находит пустые папки и удаляет их, если они реально пустые. Некоторые папки она удаляет, но не все. Если указать диск, а не конкретно путь, где предположительно лежат эти папки, то возникает ошибка "отказано в доступе", да же если просто попытаться получить её имя. Как сделать так, чтобы можно было игнорировать те папки, которые недоступны даже администратору и продолжить поиск и удаление?
Пробовал делать через отлов исключения, но тогда поиск останавливается совсем.
Прикрепляю часть кода, которые пока работает)
Аннотация 2019-10-19 182632.png


Пароль к архиву: 111
 

Вложения

Spectrum735

Житель форума
Форумчанин
Регистрация
21.02.2019
Сообщения
32
Репутация
2
Гугл на эту тему явного ответа не дает
 

Spectrum735

Житель форума
Форумчанин
Регистрация
21.02.2019
Сообщения
32
Репутация
2
На vb не пишу, но думаю, что вам надо обработать это исключение. Копайте в ту сторону
Я пробовал с исключениями, но тогда цикл for each останавливается полностью, а через continue итерацию не пропускает. Думал, может быть сделать так, чтобы сначала искать все папки, а по имени фильтровать те, которые недоступны
 
Последнее редактирование:

Spectrum735

Житель форума
Форумчанин
Регистрация
21.02.2019
Сообщения
32
Репутация
2
Вам нужно проверять права на папку, пример:http://windata.ru/windows-7/bezopasnost-7/utilita-icacls-v-windows-7/
Я нашел как это сделать средствами VB.net, с помощью sub'a поиска файлов в массиве путей, которая взята отсюда http://www.cyberforum.ru/vb-net/thread1139502.html
Я переделал её в поиск папок
Код:
[ATTACH=full]59416[/ATTACH]
Далее я нашел как определить, пустая папка или нет, с помощью функции GetFolderSize отсюда http://pamirych.ru/получить-размер-папки/
Всё работает, но не совсем корректно. Т.е. При выборе диска, например C:\, удаляются папки которые вложены, а не вместе с теми, которые верхнего уровня. Или наоборот папка верхнего уровня считается за одну, а не вместе с пустыми, которые в неё вложены.
 

Вложения

Spectrum735

Житель форума
Форумчанин
Регистрация
21.02.2019
Сообщения
32
Репутация
2

Spectrum735

Житель форума
Форумчанин
Регистрация
21.02.2019
Сообщения
32
Репутация
2
Вообщем, я завершил свой проект. Возможно пара багов и осталось, но не значительных.
-Добавлена опция выбора количество циклов удаления пустых папок. Максимум 5, чем больше, тем глубже очистка и точнее конечный результат (число удалённых папок), но тем он и дольше. Для лучшего результата хватит и 2-3 цикла.

PS, возможно доработаю еще, чтобы была автоматическая прокрутка ListBox'ов; стирание удаленных item'ов, если папка уже удалена. Это не так важно, но всё же приятно. Основную функцию программа выполняет, да и ладно. Написана на Visual Basic, скомпилирована в Visual Studio 2019. Экзешник можно найти здесь https://ru-sfera.org/threads/chistilschik-pustyx-papok.3879/
 
Последнее редактирование:
Верх