• Уменьшение отступа

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

    (info@ru-sfera.pw)

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


Spectrum735

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


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

Вложения

  • EmptyFolderCleaner.rar
    595.7 КБ · Просмотры: 0

Hooko

Уважаемый пользователь
Форумчанин
Регистрация
24.08.2016
Сообщения
230
Репутация
345
Jabber

Spectrum735

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

Spectrum735

Просветленный
Просветленный
Регистрация
21.02.2019
Сообщения
260
Репутация
141
Вам нужно проверять права на папку, пример:
Я нашел как это сделать средствами VB.net, с помощью sub'a поиска файлов в массиве путей, которая взята отсюда
Я переделал её в поиск папок
Код:
[ATTACH=full]59416[/ATTACH]
Далее я нашел как определить, пустая папка или нет, с помощью функции GetFolderSize отсюда
Всё работает, но не совсем корректно. Т.е. При выборе диска, например C:\, удаляются папки которые вложены, а не вместе с теми, которые верхнего уровня. Или наоборот папка верхнего уровня считается за одну, а не вместе с пустыми, которые в неё вложены.
 

Вложения

  • 1571848471139.png
    1571848471139.png
    71.2 КБ · Просмотры: 29

Spectrum735

Просветленный
Просветленный
Регистрация
21.02.2019
Сообщения
260
Репутация
141
Вам нужно проверять права на папку, пример:
Насчет команды icacls, не понятно как считывать права. Ну да ладно. Я нашел другой способ, как это обойти
 

Spectrum735

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

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