0 / 0 / 0
Регистрация: 14.02.2014
Сообщений: 16
.NET 3.x

Как распаковать файл из архива внутри архива? Ionic.Zip

22.08.2019, 09:41. Показов 6162. Ответов 2

Author24 — интернет-сервис помощи студентам
Всем привет!
Пишу программу для распаковки файла "Main.xml" в ZIP архиве "Test2" в ZIP архиве "Test".
Для лучшего понимание прикреплю архив и библиотеку Ionic.Zip которую использую.
Пишу под Net 3.5, поэтому использую библиотеку Ionic.Zip

Вопрос:
Можно ли открыть архив "Test" и в этом архиве "Test" открыть ещё один архив "Test2" и распаковать только файл "Main.xml". (без создания временных файлов, папок и т.д)? не настаиваю на данной библиотеке, главное результат и совместимость Net 3.5.

Рассматривал вариант распаковать архив "Test" во временную папку, потом взять архив "Test2" распаковать и наконец-то получить файл "Main.xml", а всё остальное удалить.
Вложения
Тип файла: zip Test.zip (318 байт, 10 просмотров)
Тип файла: 7z Ionic.Zip.7z (251.9 Кб, 7 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.08.2019, 09:41
Ответы с готовыми решениями:

Распаковка архива zip
как распаковать архив .zip в дерикторию с программой?

[Ionic.zip] Исключение при распаковке архива
Всем доброго времени суток. Делаю Updater который скачивает архив потом его распаковывает и запускает install.exe(он переименовывает файл...

Как можно реализовать распаковку zip архива
Ребят подкиньте пример кода как можно реализовать распаковку zip архива(или любого другого архива) в определенную папку без сторонних...

2
Администратор
Эксперт .NET
 Аватар для OwenGlendower
17934 / 14022 / 5353
Регистрация: 17.03.2014
Сообщений: 28,696
Записей в блоге: 1
22.08.2019, 10:57
Цитата Сообщение от Lesha_dan Посмотреть сообщение
Можно ли открыть архив "Test" и в этом архиве "Test" открыть ещё один архив "Test2" и распаковать только файл "Main.xml". (без создания временных файлов, папок и т.д)?
Можно
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
string xml;
using (ZipFile zip1 = ZipFile.Read("Test.zip"))
{
    ZipEntry entry1 = zip1.Entries.Single(e => e.FileName == "Test2.zip");
    using (ZipFile zip2 = ZipFile.Read(entry1.ExtractToMemoryStream()))
    {
        ZipEntry entry2 = zip2.Entries.Single(e => e.FileName == "Main.xml");
        using (var reader = new StreamReader(entry2.ExtractToMemoryStream()))
        {
            xml = reader.ReadToEnd();
        }
    }
}
C#
1
2
3
4
5
6
7
8
9
10
static class IonicExtensions
{
    public static MemoryStream ExtractToMemoryStream(this ZipEntry zipEntry)
    {
        var mstream = new MemoryStream();
        zipEntry.Extract(mstream);
        mstream.Position = 0;
        return mstream;
    }
}
P.S. Ты бы хоть что-то записал в Main.xml чтобы можно было убедиться что распаковка происходит без ошибок. А так пришлось создавать свой архив.

Добавлено через 35 минут
Цитата Сообщение от Lesha_dan Посмотреть сообщение
Рассматривал вариант распаковать архив "Test" во временную папку, потом взять архив "Test2" распаковать и наконец-то получить файл "Main.xml", а всё остальное удалить.
Нет необходимости распаковывать весь архив. Достаточно распаковать только по одному файлу из каждого архива. IonicZip это умеет делать. Точно также как и обычный архиватор.
1
0 / 0 / 0
Регистрация: 14.02.2014
Сообщений: 16
22.08.2019, 11:25  [ТС]
Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.08.2019, 11:25
Помогаю со студенческими работами здесь

При переименовании архива переименовывается и файл, что был внутри
Всем добрый вечер! У меня такой вопрос: я архивирую файл(*.gz), но при переиминование архива, вместе с ним также переименовываеться и файл...

Обновление zip архива
Добрый день. Подскажите пожалуйста, как проапдейтить архив. На входе имеем папку string dir1 = "C:\\test" Обновляем...

Прочитать свойства zip-архива
Доброго времени суток. Интересует следующий вопрос: каким образом можно считать "информацию" (см. скрин окна архиватора 7zip)...

Распаковка ZIP архива / DotNetZip
Доброго времени суток уважаемые! Столкнулся с казалось бы, элементарной задачей: распаковать ZIP архив в указанную папку, отображая...

Создание архива с паролем ionic.zip
Здравствуйте уважаемые форумчане. Необходимо создать архив с паролем. Делаю так: using (ZipFile zip = new...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

Новые блоги и статьи
Исключения в Java: советы, примеры кода и многое другое
Javaican 18.05.2025
Исключения — это объекты, созданные когда программа сталкивается с непредвиденной ситуацией: файл не найден, сетевое соединение разорвано, деление на ноль. . . Список можно продолжать до бесконечности. . . .
Как сделать SSO (Single Sign-On) в C# приложении
stackOverflow 18.05.2025
SSO — это механизм, позволяющий пользователю пройти аутентификацию один раз и получить доступ к нескольким приложениям без повторного ввода учетных данных. Вы наверняка сталкивались с ним, когда. . .
Kubernetes с Apache Flink для обработки данных в реальном времени
Mr. Docker 17.05.2025
Kubernetes — это целая философия управления распределёнными приложениями. В отличие от "примитивных" решений вроде Docker Swarm, K8s (как его ласково называют в тусовке DevOps-инженеров) предлагает. . .
Использование декораторов в Python
py-thonny 17.05.2025
Если вы когда-нибудь задумывались о том, как красиво расширить функциональность кода без лишней возни и дублирования, декораторы в Python — та самая волшебная палочка, которую вы искали. По сути, это. . .
Реализация многопоточных сетевых серверов на Python
py-thonny 16.05.2025
Когда сталкиваешься с необходимостью писать высоконагруженные сетевые сервисы, выбор технологии имеет критическое значение. Python, со своей элегантностью и высоким уровнем абстракции, может. . .
C# и IoT: разработка Edge приложений с .NET и Azure IoT
UnmanagedCoder 16.05.2025
Мир меняется прямо на наших глазах, и интернет вещей (IoT) — один из главных катализаторов этих перемен. Если всего десять лет назад концепция "умных" устройств вызывала скептические улыбки, то. . .
Гибридные квантово-классические вычисления: Примеры оптимизации
EggHead 16.05.2025
Гибридные квантово-классические вычисления — это настоящий прорыв в подходах к решению сложнейших вычислительных задач. Представьте себе союз двух разных миров: классические компьютеры, с их. . .
Использование вебсокетов в приложениях Java с Netty
Javaican 16.05.2025
HTTP, краеугольный камень интернета, изначально был спроектирован для передачи гипертекста с минимальной интерактивностью. Его главный недостаток в контексте современных приложений — это. . .
Реализация операторов Kubernetes
Mr. Docker 16.05.2025
Концепция операторов Kubernetes зародилась в недрах компании CoreOS (позже купленной Red Hat), когда команда инженеров искала способ автоматизировать управление распределёнными базами данных в. . .
Отражение в C# и динамическое управление типами
stackOverflow 16.05.2025
Reflection API в . NET — это набор классов и интерфейсов в пространстве имён System. Reflection, который позволяет исследовать и манипулировать типами, методами, свойствами и другими элементами. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru