• Привет !

    На форуме есть зеркало в ТОРе:rusfwz3cukdej7do.onion

    ЗЕРКАЛА ФОРУМА:

    ru-sfera.org

    ru-sfera.online

    Обратная связь:

    Email:[email protected]

    Jabber:[email protected]

    Всего доброго !

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

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

Spectrum735

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


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

Вложения

Spectrum735

Уважаемый пользователь
Форумчанин
Регистрация
21.02.2019
Сообщения
60
Репутация
20
Гугл на эту тему явного ответа не дает
 

Spectrum735

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

Spectrum735

Уважаемый пользователь
Форумчанин
Регистрация
21.02.2019
Сообщения
60
Репутация
20
Вам нужно проверять права на папку, пример: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
Сообщения
60
Репутация
20

Spectrum735

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

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