狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C#使用DotNetZip封裝類操作zip文件(創建/讀取/更新)實例

admin
2024年1月19日 19:57 本文熱度 867
DotnetZip是一個開源類庫,支持.NET的任何語言,可很方便的創建,讀取,和更新zip文件。而且還可以使用在.NETCompact Framework中。 

下載地址在這里:附件:DotNetZip.rar

解壓后放到主程序同一個目錄下,引用Ionic.Zip.dll就可以了:

然后引用這個命名空間:

using Ionic.Zip;

以下是我自己封裝的一個類:

    /// <summary>

    /// Zip操作基于 DotNetZip 的封裝

    /// </summary>

    public static class ZipUtils

    {

        /// <summary>

        /// 得到指定的輸入流的ZIP壓縮流對象【原有流對象不會改變】

        /// </summary>

        /// <param name="sourceStream"></param>

        /// <returns></returns>

        public static Stream ZipCompress(Stream sourceStream, string entryName = "zip")

        {

            MemoryStream compressedStream = new MemoryStream();

            if (sourceStream != null)

            {

                long sourceOldPosition = 0;

                try

                {

                    sourceOldPosition = sourceStream.Position;

                    sourceStream.Position = 0;

                    using (ZipFile zip = new ZipFile())

                    {

                        zip.AddEntry(entryName, sourceStream);

                        zip.Save(compressedStream);

                        compressedStream.Position = 0;

                    }

                }

                catch

                {

                }

                finally

                {

                    try

                    {

                        sourceStream.Position = sourceOldPosition;

                    }

                    catch

                    {

                    }

                }

            }

            return compressedStream;

        }

 

        /// <summary>

        /// 得到指定的字節數組的ZIP解壓流對象

        /// 當前方法僅適用于只有一個壓縮文件的壓縮包,即方法內只取壓縮包中的第一個壓縮文件

        /// </summary>

        /// <param name="sourceStream"></param>

        /// <returns></returns>

        public static Stream ZipDecompress(byte[] data)

        {

            Stream decompressedStream = new MemoryStream();

            if (data != null)

            {

                try

                {

                    MemoryStream dataStream = new MemoryStream(data);

                    using (ZipFile zip = ZipFile.Read(dataStream))

                    {

                        if (zip.Entries.Count > 0)

                        {

                            zip.Entries.First().Extract(decompressedStream);

                            // Extract方法中會操作ms,后續使用時必須先將Stream位置歸零,否則會導致后續讀取不到任何數據

                            // 返回該Stream對象之前進行一次位置歸零動作

                            decompressedStream.Position = 0;

                        }

                    }

                }

                catch

                {

                }

            }

            return decompressedStream;

        }

        /// <summary>

        /// 壓縮ZIP文件

        /// 支持多文件和多目錄,或是多文件和多目錄一起壓縮

        /// </summary>

        /// <param name="list">待壓縮的文件或目錄集合</param>

        /// <param name="strZipName">壓縮后的文件名</param>

        /// <param name="IsDirStruct">是否按目錄結構壓縮</param>

        /// <returns>成功:true/失敗:false</returns>

        public static bool CompressMulti(List<string> list, string strZipName, bool IsDirStruct)

        {

            try

            {

                using (ZipFile zip = new ZipFile(Encoding.Default))//設置編碼,解決壓縮文件時中文亂碼

                {

                    foreach (string path in list)

                    {

                        string fileName = Path.GetFileName(path);//取目錄名稱

                        //如果是目錄

                        if (Directory.Exists(path))

                        {

                            if (IsDirStruct)//按目錄結構壓縮

                            {

                                zip.AddDirectory(path, fileName);

                            }

                            else//目錄下的文件都壓縮到Zip的根目錄

                            {

                                zip.AddDirectory(path);

                            }

                        }

                        if (File.Exists(path))//如果是文件

                        {

                            zip.AddFile(path);

                        }

                    }

                    zip.Save(strZipName);//壓縮

                    return true;

                }

            }

            catch (Exception)

            {

                return false;

            }

        }

        /// <summary>

        /// 解壓ZIP文件

        /// </summary>

        /// <param name="strZipPath">待解壓的ZIP文件</param>

        /// <param name="strUnZipPath">解壓的目錄</param>

        /// <param name="overWrite">是否覆蓋</param>

        /// <returns>成功:true/失?。?/span>false</returns>

        public static bool Decompression(string strZipPath, string strUnZipPath, bool overWrite)

        {

            try

            {

                ReadOptions options = new ReadOptions();

                options.Encoding = Encoding.Default;//設置編碼,解決解壓文件時中文亂碼

                using (ZipFile zip = ZipFile.Read(strZipPath, options))

                {

                    foreach (ZipEntry entry in zip)

                    {

                        if (string.IsNullOrEmpty(strUnZipPath))

                        {

                            strUnZipPath = strZipPath.Split('.').First();

                        }

                        if (overWrite)

                        {

                            entry.Extract(strUnZipPath, ExtractExistingFileAction.OverwriteSilently);//解壓文件,如果已存在就覆蓋

                        }

                        else

                        {

                            entry.Extract(strUnZipPath, ExtractExistingFileAction.DoNotOverwrite);//解壓文件,如果已存在不覆蓋

                        }

                    }

                    return true;

                }

            }

            catch (Exception)

            {

                return false;

            }

        }

    }

使用方法:

1.壓縮文件

List<string> list = new List<string>();
list.Add(@"D:\Test\ss");
list.Add(@"D:\Test\test1.jpg");
list.Add(@"D:\公司文件.txt");
list.Add(@"D:\Test\ss.xml");
bool isSuc =ZipUtils. CompressMulti(list, "D:\\Test2.zip",true);

2.解壓文件

bool isSuc = ZipUtils.Decompression("D:\\Test\\Test1.zip", "D:\\Teest", true);

該文章在 2024/1/19 21:29:48 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved