|
100 / 42 / 7
Регистрация: 03.02.2019
Сообщений: 657
|
||||||
Распаковка архивов29.05.2025, 23:46. Показов 2756. Ответов 23
Есть код, который распаковывает архивы, находящиеся в директории, используя стандартные средства Winrar и консольную команду. Подскажите как записать в коде обработку вложенных архивов, т.е если распаковали архив и в архиве еще один архив, то его распаковать с сохранением структуры каталогов.
0
|
||||||
| 29.05.2025, 23:46 | |
|
Ответы с готовыми решениями:
23
Распаковка архивов, в том числе и запароленных Распаковка rar-архивов
|
|
118 / 19 / 7
Регистрация: 27.05.2025
Сообщений: 72
|
|
| 30.05.2025, 00:55 | |
|
Распаковывать архив в папку с именем архива, проверять там наличие архивов и повторять распаковку рекурсивно до тех пор пока архивы перестанут определяться.
0
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|||||||||||
| 30.05.2025, 01:20 | |||||||||||
|
Создать метод ProcessDurectory и выносим в нее код касающийся поиска архивов и запуска их на распаковку.
Всё это можно сделать и без рекурсии. Но правок понадобится намного больше.
1
|
|||||||||||
|
19 / 18 / 1
Регистрация: 25.05.2025
Сообщений: 39
|
||||||||||||||||||||||||||
| 30.05.2025, 14:40 | ||||||||||||||||||||||||||
А вообще, конечно же, в методе PrepareOutputDirectory() нет никакой необходимости.
Возьмите за правило всегда первым делом валидировать параметры, полученные при вызове вашего метода. Например, проверяйте на то, что вам не передали пустые строки или null там, где они не должны появиться. Если в вашем архиве есть несколько вложенных архивов, каждый из которых вы хотите распаковывать в отдельный подкаталог, то делайте это одновременно в параллельных потоках (у вас же не один одноядерный процессор на компьютере).
0
|
||||||||||||||||||||||||||
|
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,234
|
|||||||||||||||||
| 30.05.2025, 16:25 | |||||||||||||||||
|
- Ложим все тарболы на стек, начинаем обрабатывать по одному - После обработки каждого архива, проверяем его outputDir - создаем на его основе еще пачку задач на обработку, уже с новым baseOutputPath. Вот так выглядит main после рефакторинга:
Полный код
Добавлено через 28 секунд Не тестировал, на лине сижу - тут WinRar-ов нету. Добавлено через 15 минут Немного еще рефакторинга (ProcessItem is immutable):
Можно развить тему и передавать директорию через параметры приложения. Добавлено через 8 минут Orlov1, по поводу Directory.GetCurrentDirectory() - тут надо задать себе вопрос.Задумка была действительно использовать текущую директорию или все-таки должна использоваться директория в которой лежит бинарь? Потому что в общем случае это разные вещи.
2
|
|||||||||||||||||
|
19 / 18 / 1
Регистрация: 25.05.2025
Сообщений: 39
|
|||||||
| 30.05.2025, 17:50 | |||||||
Поэтому никогда не стоит полагаться на то, что полученные методом параметры уже были проверены извне. Ну и кроме того, всегда проще поправить логику проверки параметров в одном месте (в коде метода), чем везде, где этот метод вызывается (например в случае, если у метода была изменена сигнатура). Соответственно, проверка параметров должна выполняться в одном месте - в коде самого метода (причём в самом начале). Например:
0
|
|||||||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||
| 30.05.2025, 18:01 | ||
|
Есть контракты. Им нужно следовать. Всё просто. Если контракт оглашает что данные должны быть строго такими-то, то это проблема вызывающего кода предоставить их. Каким образом это будет осуществлено, это дело 100500-е. имхо. наверное мы друг друга не поняли. И ли это действительно Шарписты так пишут. 100500 проверок, а контракты зачем?
0
|
||
|
19 / 18 / 1
Регистрация: 25.05.2025
Сообщений: 39
|
|||
| 30.05.2025, 18:13 | |||
А ежели эти параметры передаются сквозным образом (от метода к методу), то ничего страшного в том, что каждый из них выполнит проверку. Лучше проверить параметры несколько раз и выявить ошибку, чем не проверить их, выполнить часть бизнес-логики и потом вдруг обнаружить, что один из полученных параметров "кривой". В нашей команде мы не пропускаем pull request, если в методе не выполняется проверка полученных параметров. Если вы работаете иначе - это ваше право.
0
|
|||
|
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,234
|
||
| 30.05.2025, 18:50 | ||
|
"Принцип самурая" никто не отменял.
0
|
||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|||
| 30.05.2025, 18:51 | |||
|
Не по теме:
А именно : Контрактное программирование: предусловие На англ. статья нагляднее Design by contract Но как бы это уже в оффтоп зашло. Добавлено через 39 секунд
0
|
|||
|
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,234
|
||
| 30.05.2025, 18:53 | ||
|
0
|
||
| 30.05.2025, 18:54 | |
|
0
|
|
|
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,234
|
||
| 30.05.2025, 18:56 | ||
|
Добавлено через 1 минуту
0
|
||
| 30.05.2025, 19:32 | |
|
0
|
|
|
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,234
|
|||||||||||
| 30.05.2025, 19:57 | |||||||||||
|
Orlov1, пожалуй, еще немного рефакторинга - сделал GetOutputDir экземплярным методом ProcessItem:
Main:
Полный код
0
|
|||||||||||
| 30.05.2025, 21:15 | |
|
0
|
|
|
19 / 18 / 1
Регистрация: 25.05.2025
Сообщений: 39
|
|||
| 30.05.2025, 21:43 | |||
Тема превратилась в холивар. Я более не буду писать в ней.
0
|
|||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||
| 30.05.2025, 22:17 | ||
|
С геймплеем и графикой как у ДОС игр но с требованием современных игровых ПК.
0
|
||
| 31.05.2025, 08:44 | ||
|
Не по теме:
По "холивару": пишем, когда имеет смысл. вариант 1: передаваемый параметр задействуется где-то там, а перед ним куча кода, который не очень хочется запускать в пустую. вариант 2: это метод либы, и желательно чтобы выше отлавливалось не NRE внутренностей, а более осознанное исключение. Тут больше вопрос удобства работы с кодом и его сопровождением: найти в логах "ArgumentException parameter fileName" гораздо приятней чем просто NullReferenceException line 17. Лепить такие проверки на каждый чих действительно не очень. Как вариант можно воспользоваться фичей "nullable reference" (хотя по ней тоже ведутся споры), тем самым контракт будет более явный когда можно, а когда нельзя передавать null. В этом случае компилятор подскажет, где следует выполнить проверки, а где избыточны. Подход "ничего не знаю, вызывающая сторона должна валидировать данные" тоже имеет смысл, особенно когда остро стоит вопрос перфоманса. Тем не менее если вы копнёте те же исходники C#, там очень много таких проверок.
0
|
||
| 31.05.2025, 08:44 | |
|
Помогаю со студенческими работами здесь
20
Распаковка архивов Запуск архивов по очереди Склеивание архивов GZipStream - Неверный размер файла Параллельное создание zip архивов на WEB странице останавливается
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2.
Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В. . .
|
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2.
Задача: отобразить спецтехнику, которая на данный момент находится в ремонте.
Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
|
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
|
|
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|