Использование System.IO.Packaging для создания ZIP файла

Я знаю, что подобные библиотеки DotNetZip или SharpZipLib обычно рекомендуются для создания ZIP файлов на языке .net(С# в моем случае), но невозможно создать System.IO.Packaging для создания ZIP файла. Я подумал, что было бы неплохо попытаться разработать рутину на С#, которая могла бы это сделать, без необходимости загрузки каких-либо внешних библиотек. Кто-нибудь есть хороший пример метода или методов, которые будут использовать System.IO.Packaging для создания ZIP файла?

Ответ 1

позвольте мне google это для вас → system.io.packaging + generate + zip

первая ссылка http://weblogs.asp.net/jongalloway//creating-zip-archives-in-net-without-an-external-library-like-sharpziplib

using System;
using System.IO;
using System.IO.Packaging;

namespace ZipSample
{
    class Program
    {
        static void Main(string[] args)
        {
            AddFileToZip("Output.zip", @"C:\Windows\Notepad.exe");
            AddFileToZip("Output.zip", @"C:\Windows\System32\Calc.exe");
        }

        private static void AddFileToZip(string zipFilename, string fileToAdd, CompressionOption compression = CompressionOption.Normal)
        {
            using (Package zip = System.IO.Packaging.Package.Open(zipFilename, FileMode.OpenOrCreate))
            {
                string destFilename = ".\\" + Path.GetFileName(fileToAdd);
                Uri uri = PackUriHelper.CreatePartUri(new Uri(destFilename, UriKind.Relative));
                if (zip.PartExists(uri))
                {
                    zip.DeletePart(uri);
                }
                PackagePart part = zip.CreatePart(uri, "", compression);
                using (FileStream fileStream = new FileStream(fileToAdd, FileMode.Open, FileAccess.Read))
                {
                    using (Stream dest = part.GetStream())
                    {
                        fileStream.CopyTo(dest);
                    }
                }
            }
        }              
    }
}

Ответ 2

В .NET Framework 4.5 вы можете использовать новые классы в пространстве имен System.IO.Compression.