Using ZipLib to create a Zip File in C#

來源:互聯網
上載者:User

System.IO.Compression是.Net 2.0裡與壓縮有關的命名空間,但是使用起來並不是很方便。使用第3方庫ziplib可以很方便地進行壓縮類的操作。

      從[1]
下載動態庫,然後在工程裡Add Reference,把ICSharpCode.SharpZipLib.dll加進去。

在代碼來建立一個zip包的例子如下(摘自ziplib sample code)

using
ICSharpCode.SharpZipLib.Checksums;

using
ICSharpCode.SharpZipLib.Zip;

using
ICSharpCode.SharpZipLib.GZip;

把指定目錄下的所有檔案壓縮到一個zip包裡

        private
void ZipTheReports()
        {
            string
year = System.DateTime.Today.Year.ToString();
            string
month = System.DateTime.Today.Month.ToString();
            string
days = System.DateTime.Today.Day.ToString();    

            string[]
filenames = Directory.GetFiles(curDir);

            string
zipFileName = "Rplan Report " +
year + month + days + ".zip";
            string
zipAbsPath = this.curDir + zipFileName;

            zipRelativePath = zipFileName;

            Crc32
crc = new Crc32();
            ZipOutputStream
s = new ZipOutputStream(File.Create(zipAbsPath)); // 指定zip檔案的絕對路徑,包括檔案名稱

           

            s.SetLevel(6); // 0 - store only to 9 - means best compression

            foreach
(string file in
filenames)
            {
                FileStream
fs = File.OpenRead(file); // 檔案的絕對路徑,包括檔案名稱

                byte[] buffer
= new byte[fs.Length];
                fs.Read(buffer, 0,
buffer.Length);
                ZipEntry
entry = new ZipEntry(extractFileName(file));
//這裡ZipEntry的參數必須是相對路徑名,表示檔案在zip文檔裡的相對路徑

                entry.DateTime = DateTime.Now;

 

               // set Size
and the crc, because the information

                //
about the size and crc should be stored in the header

                // if
it is not set it is automatically written in the footer.

                //
(in this case size == crc == -1 in the header)

                //
Some ZIP programs have problems with zip files that don't store

                //
the size and crc in the header.

                entry.Size = fs.Length;
                fs.Close();

                crc.Reset();

                crc.Update(buffer);

                entry.Crc = crc.Value;

                s.PutNextEntry(entry);

 

               s.Write(buffer, 0,
buffer.Length);

            }

            s.Finish();
            s.Close();

        }

 

  // e.g. convert  c:\\temp\test.xls to test.xls

       private string extractFileName(string filePath)
        {

  

            int
index1 = filePath.LastIndexOf("\\");

            string
fileName =

                filePath.Substring(index1+1);

 

            return
fileName;
        }

 

Reference

1.ZipLib
http://www.icsharpcode.net/OpenSource/SharpZipLib/Default.aspx
A port of zlib library to C#. Its license allows developers
to include this library in commercial, closed-source applications.

2. System.IO.Compression Namespace
http://msdn2.microsoft.com/en-us/library/system.io.compression.aspx

DeflateStream Class
http://msdn2.microsoft.com/en-us/library/system.io.compression.deflatestream.aspx

3.Compression
Application Sample
http://msdn2.microsoft.com/en-us/library/ywf6dxhx.aspx

This sample demonstrates compression capabilities available
in the .NET Framework. It builds a Windows Forms application that employs the
GZipStream and DeflateStream types to compress and decompress files. The sample
also introduces several types that are new in the .NET Framework version 2.0.

 

4. Using the Zip Classes in the J# Class Libraries to Compress
Files and Data with C#

http://msdn.microsoft.com/msdnmag/issues/03/06/ZipCompression/default.aspx

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.