?

Log in

No account? Create an account
Dotnet_am

dotnet_am


C# и платформа .NET в вопросах и ответах

.NET технологии в Армении


Previous Entry Share Next Entry
3.2.4 Как упаковать файлы в Zip-архив.
Dotnet_am
dotnet_am

В .NET Framework очень богатая библиотека классов. Там есть почти все, что может вам понадобится во время разработки програм, причем в готовом виде. Нужно лишь инициализировать и вызвать пару-тройку методов. Ну а если чего-то вдруг нет, то в первую очередь  надо искать готовое решение на  Codeplex.
Codeplex - сайт open-source проектов, спонсируемый Microsoft.

Я это к тому, что данная задача относится как раз т тому случаю. Для решения будем использовать DotNetZip Library.   На этот раз распишу все поподробнее ...

1. Идем по ссылке прямо на вкладку Downloads проекта и скачиваем оттуда  DotNetZipLib-Runtime-v1.8.zip. Возможно, к тому времени, когда вы читаете этот пост, есть уже более свежая версия - скачайте ее.

2. Распакуйте архив и найдите файл Ionic.Zip.dll (там есть и другие версии, например Ionic.Zip.CF.dll для мобильный устройств).

3. Создайте новый проект WindowsFormsApplication.

4. Чтобы использовать библиотеку, нужно добавить ссылку (Reference) на нее. В дереве проекта правый клик на папке References , затем Add Reference ... , выберете вкладку Browse и откройте там
Ionic.Zip.dll 

5. Теперь перетащите на форму кнопку и дважды кликните на ней , чтобы создать обработчик.  Получится так.

private void button1_Click(object sender, EventArgs e)
   {
                 
   }

6. Добавьте на самом верху кода, там где мога операторов using типа
using System;
using System.Collections.Generic;
using System.ComponentModel; 

еще один вот такой

using
Ionic.Zip;

7. Теперь между фигурными скобкам button1_Click пишем код.

using (ZipFile zip = new ZipFile()) // Создаем объект для работы с архивом
{
    zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression; // Задаем максимальную степень сжатия
    zip.AddDirectory(@"C:\project\"); // Кладем в архив папку вместе с содежимым
    zip.AddFile(@"c:\Temp\Import.csv"); // Кладем в архив одиночный файл
    zip.Save(@"C:\Temp\PackedProject.zip"); // Создаем архив     
}

Этот код запаковывает в архив одну папку со всеми файлами (C:\projects\) и один файл (c:\Temp\Import.csv) в архив с именем PackedProject.zip, при этом используя максимальное сжатие.
Конечно, надо заменить пути и файлы на реально имеющиеся у вас.

Что означает символ @ перед путями и оператор using () как-нибудь объясню, но надеюсь, что вы и сами знаете.

И домашнее задание: используя, то, что вы только что узнали и информацию из темы   3.2.2 Как получить пути специальных папок  Windows, напишите программу, которая архивирует папку My Documents (Мои Документы) и помещает его куда-нибудь. Место выберите сами.  

  • 1
Я как то ипользовал SharZipLib для этих целей, тоже хорошая библиотека, работает с файлами Zip, GZip, BZip2 и Tar

Приходилось сталкиваться, но сам не использовал.

Proger

(Anonymous)
zip.Save(@"C:\Temp\PackedProject.zip"); // Создаем архив -
вот в этой строчке вылетает эксепшн файл нот фаунд. В чем может быть дело?
Папка существует, даже пробовал архив пустой создать...

А файлы которые хотите упаковать существуют ?

Если не получится, киньте мне проект на rwedge собака yandex.ru - посмотрю

Русские имена файлов

После упаковки файлов с именами с русскими символами, эти символы видны как знаки вопросов. Для нормального отображения русских символов в именах нужно после строчки
zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression; // Задаем максимальную степень сжатия
добавить строчку
zip.ProvisionalAlternateEncoding = Encoding.GetEncoding("cp866");

Продам летнюю резину с дисками,НОВУЮ!

(Anonymous)
Продается комплект абсолютно новой летней резины на дисках,однократная бортовка, балансировка.
Диски - Borbet LV5 7*16 5/110ET40
http://s50.radikal.ru/i128/1004/1d/4f9fa878222f.jpg
Резина - Continental ContiPremiumContact 2 195/55 R16 87 H
Цена за 4диска с резиной 35тыс.руб.
Осмотр М.О.г.Красногорск

Антон 89055785133
Елена 89067873140

  • 1