Главная » Язык программирования C#

Как скачать и разархивировать(распаковать) архив на C#?

Категорически приветствую всех прогеров и не только. Предстала перед глазами и уставшим мозгом задача следующего типа: программа должна скачивать на компьютер пользователя бригаду помощников в виде нескольких десятков файлов и парочки вложенных папок. То есть уже на этапе описания этих входных данных должно сложиться веское понимание того, что насиловать код поочередным скачиванием каждого файла и созданием нужных папок мы, разумеется, не будет. Определенно нужно все это дело качать одним файлом, что так же толкает к следующему экзистенциальному утверждению что необходимо использовать архив.

Создать архив ручками мы скорее всего уже умеем, а посему встает необходимость ответа на вопрос, а должна ли это уметь программа, или ей хватит лишь того, чтобы распаковывать эти архивы? Я клоню это к тому, что если вам нужно научить программу архивировать файлы, лучше ищите далее, так как я тут помогу только с их разархивацией, НО расскажу как лучше и проще это реализовать.

Что же, задача стоит — нужно ее решать. Включаем гугл-обучение и натыкаемся на различное множество еще более различных библиотек(от стандартных типа System.IO.Compression до самописных обычными юзерами) каждый из который имеет свою мозоль, на которую обязательно наступишь при его использовании. Начиная от тупо нерабочих кодов, представленных на страницах Рунета, включая появление некоторых библиотек только на довольно поздних версиях NET FrameWork, а так же отсутствие какой-либо осознанной документации для самописных библиотек и наконец-то заканчивая тем, что действительно рабочих кодов и тем более документации по любому из рассматриваемых способов практически не найти(может плохо ищу).

Но были и относительно простые способы использования стандартных архиваторов. А теперь нужно подумать о том, что не у всех пользователей может оказаться установлен архиватор вроде всемирно известного WinRAR или 7-Zip или тому подобных аналогов, коих бесчисленное множество, и опять таки насиловать код проверкой их наличия и собственно использованием их для наших целей, для чего нужно глубоко изучить их работу или хотя бы найти их FAQ. Нет, нам нужно универсальное средство для распаковки архива которое есть на всех компьютерах(вру, на Windows). И оно есть — стандартное средство уважаемой Windows — Мастер распаковки zip файлов(или что-то определенно похожее и не похожее друг на друга в различных версиях этой системы). Вот только беда в том, что любимые поисковые системы не дают никакого потребного ответа на вопрос как можно это заюзать это чудо не из под интерфейса пользователя. Если узнаете, прошу поделиться.

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

Самораспаковывающийся архив

Вот оно блять самое простое решение. Самораспаковывающийся архив!!!.

Если коротко по теории, то самораспаковывающийся архив — это самая обычная программа формата exe(универсальность), которая создана путем добавления в один файл как самого архива, который вам и нужно распаковать, так и специального автономного приложения используемого архиватора, например, Winrar`а. Одним словом вам не нужно будет заботиться о том, имеется ли на конечном компьютере какой-либо архиватор, так как он уже идет вместе с вашим самораспаковывающимся архивом, с помощью которого ваш архив и будет распакован. Создание в Winrare данного архива отличается от обычного процесса создания архива лишь тем, что нужно будет поставить галочку в поле аля «Create SFX archive» или тому подобное на русском.

Но наша задача состоит в том, чтобы наша программа данный архив распаковала. Для этого необходимо использовать следующий код на C#:

Process p = new Process();
ProcessStartInfo s = new ProcessStartInfo();
s.FileName = "archive.exe";
s.CreateNoWindow = false;
s.WindowStyle = ProcessWindowStyle.Normal;
s.Arguments = @"/s";
p.StartInfo = s;
p.Start();
p.WaitForExit();

Единственный момент, на котором стоит тут зациклиться, так это то, что тут используется дополнительный аргумент, который передается нашему архиву. Этот аргумент имеет отношение именно к самораспаковывающим архивом созданным с помощью Winrara и обозначает что процесс распаковки будет проходить в silent-режиме, то есть без каких-либо вступительных речей на пол экрана и просьбы пользователя разрешить выполнение этой операции, так как данную задачу мы возлагаем на плечи нашей программы и вмешательство пользователя нам крайне нежелательно.

Вот собственно и все, что нужно для распаковки архива на языке C#. И обещанным становится понимание того, что для запаковки файлов, вам всего лишь необходимо иметь в ресурсах вашей программы соответствующий автономный архиватор все того же, например, Winrar, используя которую вы сможете создать архив.

Добавить комментарий

Ваш комментарий появится после модерации.