LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#使用DotNetZip封裝類(lèi)操作zip文件(創(chuàng)建/讀取/更新)實(shí)例

admin
2024年1月19日 19:57 本文熱度 1483
DotnetZip是一個(gè)開(kāi)源類(lèi)庫(kù),支持.NET的任何語(yǔ)言,可很方便的創(chuàng)建,讀取,和更新zip文件。而且還可以使用在.NETCompact Framework中。 

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

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

然后引用這個(gè)命名空間:

using Ionic.Zip;

以下是我自己封裝的一個(gè)類(lèi):

    /// <summary>

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

    /// </summary>

    public static class ZipUtils

    {

        /// <summary>

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

        /// </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>

        /// 得到指定的字節(jié)數(shù)組的ZIP解壓流對(duì)象

        /// 當(dāng)前方法僅適用于只有一個(gè)壓縮文件的壓縮包,即方法內(nèi)只取壓縮包中的第一個(gè)壓縮文件

        /// </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方法中會(huì)操作ms,后續(xù)使用時(shí)必須先將Stream位置歸零,否則會(huì)導(dǎo)致后續(xù)讀取不到任何數(shù)據(jù)

                            // 返回該Stream對(duì)象之前進(jìn)行一次位置歸零動(dòng)作

                            decompressedStream.Position = 0;

                        }

                    }

                }

                catch

                {

                }

            }

            return decompressedStream;

        }

        /// <summary>

        /// 壓縮ZIP文件

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

        /// </summary>

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

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

        /// <param name="IsDirStruct">是否按目錄結(jié)構(gòu)壓縮</param>

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

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

        {

            try

            {

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

                {

                    foreach (string path in list)

                    {

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

                        //如果是目錄

                        if (Directory.Exists(path))

                        {

                            if (IsDirStruct)//按目錄結(jié)構(gòu)壓縮

                            {

                                zip.AddDirectory(path, fileName);

                            }

                            else//目錄下的文件都?jí)嚎s到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/失敗:false</returns>

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

        {

            try

            {

                ReadOptions options = new ReadOptions();

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

                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 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
思思久久69视频 | 中国三级久久精品三级 | 天堂国产人综合亚洲欧美 | 日韩.欧美.亚洲.另类.国产 | 久久国产午夜精品理 | 亚洲麻豆精品国偷自产在线91 |