web-dev-qa-db-ja.com

System.IO.Packagingを使用してZipファイルを生成する

.net言語(私の場合はC#)でZipファイルを作成するには、通常、DotNetZipまたはSharpZipLibライブラリのようなものが推奨されることを知っていますが、System.IO.Packagingを使用して生成することは不可能ではありませんZipファイル。外部ライブラリをダウンロードせずに、C#でルーチンを開発してみて、それができるのはいいことだと思いました。 System.IO.Packagingを使用してZipファイルを生成する1つまたは複数のメソッドの良い例はありますか?

12
Jez

これをググってみましょう-> 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);
                    }
                }
            }
        }              
    }
}
31
RamonBoza

.NET Framework 4.5では、 System.IO.Compression 名前空間で新しいクラスを使用できます。

10
Heiko Scholze