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

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

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

Студворк — интернет-сервис помощи студентам
Всем привет!
Пишу программу для распаковки файла "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 байт, 8 просмотров)
Тип файла: 7z Ionic.Zip.7z (251.9 Кб, 7 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.08.2019, 09:41
Ответы с готовыми решениями:

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

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

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

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

2
Администратор
Эксперт .NET
16314 / 12805 / 5058
Регистрация: 17.03.2014
Сообщений: 26,075
Записей в блоге: 1
22.08.2019, 10:57 2
Цитата Сообщение от 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  [ТС] 3
Спасибо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.08.2019, 11:25
Помогаю со студенческими работами здесь

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru