欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

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

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

admin
2024年1月19日 19:57 本文熱度 881
DotnetZip是一個開源類庫,支持.NET的任何語言,可很方便的創(chuàng)建,讀取,和更新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>

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

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

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

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

                            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è)置編碼,解決壓縮文件時中文亂碼

                {

                    foreach (string path in list)

                    {

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

                        //如果是目錄

                        if (Directory.Exists(path))

                        {

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

                            {

                                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/失敗:false</returns>

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

        {

            try

            {

                ReadOptions options = new ReadOptions();

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