Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
84 / 80 / 6
Регистрация: 11.04.2021
Сообщений: 319
Записей в блоге: 7
.NET 4.x

Обсуждение кода программы для создания и распаковки Zip архивов

28.08.2026, 13:18. Показов 3639. Ответов 44
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Готовые решения и полезные коды на Visual Basic .NET (Часть-2)


Sergei Luksha, Код работает, но содержит ряд серьёзных проблем .... от архитектурных до логических ошибок.

Что неправильно или опасно:

(1) Очень плохая проверка завершения записи в Zip

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
Do While Not IO.File.Exists(arhoutput)
    ...
Loop
 
Do
    ...
    Try
        Using fs As IO.FileStream = IO.File.Open(arhoutput, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.None)
        End Using
        Exit Do
    Catch
    End Try
Loop
Проблемы этого куска кода... бесконечный цикл... если файл так и не появится или не освободится.

Catch без логирования .... вы не узнаете, почему цикл не завершается.

Проверка доступа на чтение не гарантирует... что CopyHere завершил копирование всех файлов. CopyHere !!! асинхронный !!! ... и файл может быть доступен для чтения, но копирование ещё идёт.


(2) Ложное уведомление... UnZip не ждёт завершения распаковки

VB.NET
1
2
output.CopyHere(input.Items, 4)
Label3.Text = "Файл успешно распакован...!"
CopyHere !!!! асинхронный !!! Вы сразу выводите сообщение об успехе, хотя распаковка может ещё идти.

(3) Переиспользование глобальных переменных

VB.NET
1
2
Dim input As Shell32.Folder
Dim output As Shell32.Folder
В Zip вы пишете:

VB.NET
1
2
input = sh.NameSpace(dirinput)
output = sh.NameSpace(arhoutput)
В UnZip:

VB.NET
1
2
output = sh.NameSpace(dirout)
input = sh.NameSpace(arhinp)
Лучше делать локальные переменные внутри каждого метода... иначе это опасно... если методы вызываются быстро друг за другом... состояния могут перемешаться.

(4) Нет обработки ошибок при работе с Shell
Если путь содержит недопустимые символы или архив повреждён ... будет исключение... которое вы не обрабатываете.

Если файл занят другим процессом... программа упадёт.

(5) Не используется Async / Await
Из-за синхронных вызовов и DoEvents интерфейс будет (зависать) на время операции. DoEvents.... это !!! антипаттерн !!! ошибочный и вредный подход к решению этой задачи
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.08.2026, 13:18
Ответы с готовыми решениями:

Подскажите толковые библиотеки для распаковки ZIP архива
Пробовал распаковать архив сторонней библиотекой Ionic.Zip , пишет ошибку "Could not read file.zip...

Как исправить ошибку распаковки ZIP, связанную с Shell32.dll?
Здравствуйте.Есть код распаковки Zip архива. Private Sub Button1_Click(ByVal sender As...

ZIP архив. Парсинг и редактирование текстового файла, помещенного в архив без распаковки
Добрый день, в зип архиве лежит файл текстовой. Нужно открыть архив, ничего никуда не доставать....

44
Любитель
 Аватар для Тим70
1074 / 786 / 161
Регистрация: 27.01.2019
Сообщений: 1,552
01.09.2026, 10:07
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Каталог bin лучше все-таки удалять, чтобы избежать ложных срабатываний антивирусов.
Ок! Учту.
2
 Аватар для Sergei Luksha
21 / 13 / 0
Регистрация: 03.11.2022
Сообщений: 11
01.09.2026, 17:32
edmonsur: Спасибо за подробный разбор ошибок в коде, который я выложил раньше...
Все эти нюансы я учёл а двух новых вложениях.

OwenGlendower : А что касаемо правил форума, то я , по-моему, нигде не успел ещё их нарушить...
1
bite
 Аватар для I can
5009 / 4817 / 852
Регистрация: 13.04.2015
Сообщений: 10,082
01.09.2026, 18:32
Цитата Сообщение от Sergei Luksha Посмотреть сообщение
А что касаемо правил форума, то я , по-моему, нигде не успел ещё их нарушить.
Вот жеж
Цитата Сообщение от Sergei Luksha Посмотреть сообщение
мне помог OpenCode, за что ему низкий поклон, респект и уважуха
0
 Аватар для Sergei Luksha
21 / 13 / 0
Регистрация: 03.11.2022
Сообщений: 11
01.09.2026, 23:06
I can: Так помогать здесь как бы не запрещено..., или я чего-то не догоняю...?

А если я что-то нарушил, так это не со зла, а по незнанию...

Прошу меня понять и простить...
1
bite
 Аватар для I can
5009 / 4817 / 852
Регистрация: 13.04.2015
Сообщений: 10,082
01.09.2026, 23:08
Цитата Сообщение от Sergei Luksha Посмотреть сообщение
Так помогать здесь как бы не запрещено
Использовать ИИ запрещено.
0
 Аватар для Sergei Luksha
21 / 13 / 0
Регистрация: 03.11.2022
Сообщений: 11
01.09.2026, 23:11
Цитата из правил: 9. Если код был написан с помощью ИИ, обязательно напишите об этом.

Я и написал об этом... Не пойму, где тут моё нарушение...?
1
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18409 / 14340 / 5371
Регистрация: 17.03.2014
Сообщений: 29,030
Записей в блоге: 1
01.09.2026, 23:26
Цитата Сообщение от Sergei Luksha Посмотреть сообщение
Не пойму, где тут моё нарушение...?
Вы ничего не нарушили.

Цитата Сообщение от Sergei Luksha Посмотреть сообщение
Я и написал об этом...
Это правило было добавлено после того как вы опубликовали два своих примера. И после того как вы сказали что использовали ИИ. В будущем, если будете публиковать новые примеры созданные при помощи ИИ не забудьте упомянуть об этом. Речь шла только об этом. И только поэтому я просил вас перечитать правила.

Теперь давайте вернемся к теме обсуждения. Если есть что еще обсуждать.
0
 Аватар для Sergei Luksha
21 / 13 / 0
Регистрация: 03.11.2022
Сообщений: 11
02.09.2026, 13:48
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Теперь давайте вернемся к теме обсуждения. Если есть что еще обсуждать.
Давайте обсуждать два моих исправленных проекта... Хотелось бы знать ваше профессиональное мнение ....

Цитата Сообщение от Sergei Luksha Посмотреть сообщение
SVL Создание и распаковка архива.zip (463.8 Кб, 11 просмотров)
SVL Создание и распаковка архива_2.zip (464.3 Кб, 9 просмотров)
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18409 / 14340 / 5371
Регистрация: 17.03.2014
Сообщений: 29,030
Записей в блоге: 1
02.09.2026, 21:59
Sergei Luksha, я уже привел свое мнение:

Цитата Сообщение от OwenGlendower Посмотреть сообщение
Проект следует мигрировать на .NET Framework 4.8 чтобы иметь возможность использовать самые последние возможности платформы. Её выпустили 7 лет назад. Новых версий уже не будет (есть 4.8.1, но там нет нового функционала). Код лучше переписать используя стандартные классы. Он станет заметно проще. И будет более надежным т.к. не будет требовать однопоточную модель работы. Вам вероятно это ни о чем не скажет, но поверьте это плохо.
1
 Аватар для Sergei Luksha
21 / 13 / 0
Регистрация: 03.11.2022
Сообщений: 11
03.09.2026, 16:38
OwenGlendower Все свои проекты я уже перевёл на .NET Framework 4.8...

Цитата Сообщение от OwenGlendower Посмотреть сообщение
Код лучше переписать используя стандартные классы. Он станет заметно проще. И будет более надежным т.к. не будет требовать однопоточную модель работы. Вам вероятно это ни о чем не скажет, но поверьте это плохо.

Я именно это и сделал во втором варианте -> "SVL Создание и распаковка архива_2.zip" и полностью всё прокомментировал...
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18409 / 14340 / 5371
Регистрация: 17.03.2014
Сообщений: 29,030
Записей в блоге: 1
03.09.2026, 22:14
Цитата Сообщение от Sergei Luksha Посмотреть сообщение
Все свои проекты я уже перевёл на .NET Framework 4.8...
Очевидно не все.

Цитата Сообщение от Sergei Luksha Посмотреть сообщение
Я именно это и сделал во втором варианте -> "SVL Создание и распаковка архива_2.zip" и полностью всё прокомментировал...
Нет. В обоих примерах вы используете функции оболочки Windows.
1
Модератор
Эксперт .NET
 Аватар для Yury Komar
4378 / 3448 / 512
Регистрация: 27.01.2014
Сообщений: 6,267
04.09.2026, 09:15
Sergei Luksha, Сменить фреймворк проекта - это несовсем то, что имелось ввиду и не означает перевод всего кода на этот фреймворк. Ведь сам код то не поменялся и все так же использует Shell32, вместо функций самого фреймворка 4.8.
1
Любитель
 Аватар для Тим70
1074 / 786 / 161
Регистрация: 27.01.2019
Сообщений: 1,552
04.09.2026, 14:36
Добавлено через 2 минуты
Sergei Luksha, Посмотрите Здесь
0
 Аватар для Sergei Luksha
21 / 13 / 0
Регистрация: 03.11.2022
Сообщений: 11
06.09.2026, 21:46
Одного не пойму, что вы имеете против Shell32...?!

Проекты нормально работают, выполняют свои функции без ошибок и падений...

Я их выложил с одной целью - поделиться данными вариантами с народом, может кому-то да и пригодится...

А те проекты, которые я выложил сюда, я не менял на .NET Framework 4.8. Они так и лежат здесь в первоначальном виде..
Если есть у кого-то желание, могу загрузить эти проекты на .NET Framework 4.8.

Короче..., я так понял, что обсуждать именно проекты тут никто не собирается...
Изливается какой-то негатив...

Ну так я больше не буду утомлять Вас своим присутствием...

С уважением... Sergei Luksha
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18409 / 14340 / 5371
Регистрация: 17.03.2014
Сообщений: 29,030
Записей в блоге: 1
07.09.2026, 01:11
Цитата Сообщение от Sergei Luksha Посмотреть сообщение
Одного не пойму, что вы имеете против Shell32...?!
Я вам уже писал. Код взаимодействующий с Shell32 обязан выполняться в STA потоке. Главный поток Windows Forms приложения является таким, но если понадобится вынести архивирование в отдельный поток, то могут начаться проблемы. Отдельный поток тут необходим чтобы интерфейс оставался отзывчивым пока идет работа с архивом. То ради чего вы (или ИИ?) использовали DoEvents - антипаттерн! Второй недостаток это что функции Windows API не стыкуются с классами из .NET Framework. Поэтому применять их лучше когда задача не решается средствами стандартной библиотеки. В случае архивации это не так. Третий недостаток это другая модель обработки ошибок на основе кодов возврата. Это не плохим само по себе, но если есть возможность переписать код без использования Windows API, то лучше так и сделать.


Цитата Сообщение от Sergei Luksha Посмотреть сообщение
Проекты нормально работают, выполняют свои функции без ошибок и падений...
Функциональность ваших решений еще нужно проверить. Т.к. вы пришли на форум программистов, то люди в первую очередь критикуют код - а его качество оставляет желать лучшего.

Цитата Сообщение от Sergei Luksha Посмотреть сообщение
Ну так я больше не буду утомлять Вас своим присутствием...
Извините что не соответствуем вашим высоким стандартам

Добавлено через 25 минут
Цитата Сообщение от Sergei Luksha Посмотреть сообщение
Одного не пойму, что вы имеете против Shell32...?!
И еще вдогонку. А вы сами можете объяснить почему выбрали Shell32?
4
Вернулся
 Аватар для HackerVlad
1778 / 673 / 46
Регистрация: 10.09.2021
Сообщений: 2,820
07.09.2026, 19:54
Цитата Сообщение от Тим70 Посмотреть сообщение
и всему чему я научилса,я благодарен форумчанам.Это сильные программисты,слушайте их советы
да, я тоже сначала был самоучкой, потом учился у форумчан, у таких профи как The trick и так далее, а теперь я учусь только у ИИ если честно теперь можно вообще не общаться с форумчанами а болтать только например с той же Алисой и тебе она выбросит куча всякого прекрасного кода по твоим запросам и всё объяснит как настоящий учитель...
3
bite
 Аватар для I can
5009 / 4817 / 852
Регистрация: 13.04.2015
Сообщений: 10,082
07.09.2026, 19:57
Цитата Сообщение от HackerVlad Посмотреть сообщение
Алисой и тебе она выбросит куча всякого прекрасного кода
Выбросит твой прекрасный код в помойку?
0
Вернулся
 Аватар для HackerVlad
1778 / 673 / 46
Регистрация: 10.09.2021
Сообщений: 2,820
07.09.2026, 19:57
OwenGlendower, а вы жёсткий критик однако, я как почитал вашу критику просто прифигел)))) хорошо что в моём разделе меня не критикуют)))
0
bite
 Аватар для I can
5009 / 4817 / 852
Регистрация: 13.04.2015
Сообщений: 10,082
07.09.2026, 19:59
Цитата Сообщение от HackerVlad Посмотреть сообщение
хорошо что в моём разделе меня не критикуют
А он туда не заглядывает, не пали контору
0
Эксперт .NET
 Аватар для Rius
13851 / 7893 / 1707
Регистрация: 25.05.2015
Сообщений: 23,962
Записей в блоге: 14
07.09.2026, 20:00
Цитата Сообщение от HackerVlad Посмотреть сообщение
и тебе она выбросит куча всякого прекрасного кода по твоим запросам и всё объяснит как настоящий учитель...
.. а потом твой прекрасный код падает, и вот ты уже выходишь из отпуска под новый год разгребать последствия, потому этот "настоящий" учитель не спорит и всё одобряет.

Интересно, какой бы фреймворк написал pgb, если бы дожил до LLM.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.09.2026, 20:00

Параллельное создание zip архивов на WEB странице останавливается
Не веб-сайте есть страничка "Создать архивы". Жму кнопку, создаются пустые архивы и начинается...

Получить в treeview содержимое всех архивов *.zip в папке
Всем привет. Есть папка. D:\arh\other\ . В ней лежат архивы *.zip. Как можно получить содержимое...

Распаковка архива с именем архива по маске
Всем привет! Понимаю, что тема с архивами уже избитая, но все же есть определенная задача. Прошу...

Код распаковки архива
Помогите пож. с этим кодам: Sub UnZip() Dim sh As New Shell32.Shell() Dim output As...

Неверная кодировка при распаковке zip архива
для распаковки решил воспользоваться не стандартной библиотекой, а библиотекой DotNetZip...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru