C# +SharpZipLib 庫壓縮內存當中的流文件


SharpZipLib 庫

SharpZipLib 是一個開源的基於 .NET 平台的壓縮、解壓縮類庫。特點是經過長期的開發和使用現在已經變得非常的穩定,可以放心的應用到產品中。

在 .NET 平台上,要操作壓縮文件的話您的第一選擇一定是 SharpZip;

 

實踐

 

 

byte[] buffer = new byte[1024 * 1024 * 5];
            using (MemoryStream st = new MemoryStream())//MemoryStream為內存流
            {
                //ZipOutputStream類的構造函數需要一個流,文件流、內存流都可以,壓縮后的內容會寫入到這個流中。
                using (ZipOutputStream zipStream = new ZipOutputStream(st))
                {
                    string str = CommonHelper.HttpGetFile(uri);//此處為下載的文件轉換成了字符串
                    if (!string.IsNullOrEmpty(str))
                    {
                        byte[] bytes = Encoding.UTF8.GetBytes(str);
                        ZipEntry zipEntry = new ZipEntry("xxx.doc");
                        zipEntry.DateTime = DateTime.Now;
                        zipEntry.IsUnicodeText = true;
                        zipStream.PutNextEntry(zipEntry);
                        zipStream.Write(bytes, 0, bytes.Length);
                        zipStream.CloseEntry();
                    }
                    //獲取excel字節並添加到壓縮文件
                    buffer = ExcelHelper<T>.OutputExcel();//此處為獲取的的excel字節
                    ZipEntry zipEntry2 = new ZipEntry("xxxx.xls");
                    zipEntry2.DateTime = DateTime.Now;
                    zipEntry2.IsUnicodeText = true;//解決文件名亂碼
                    zipStream.PutNextEntry(zipEntry2);
                    zipStream.Write(buffer, 0, buffer.Length);
                    zipStream.CloseEntry();
                    //使用流操作時一定要設置IsStreamOwner為false。否則很容易發生在文件流關閉后的異常。
                    zipStream.IsStreamOwner = false;
                    zipStream.Finish();
                    zipStream.Close();
                }
                buffer = st.GetBuffer();
                st.Close();
            }

 

歡迎指錯!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM