首頁 後端開發 C#.Net教程 .NET中的zip的壓縮和解壓

.NET中的zip的壓縮和解壓

Dec 19, 2016 pm 04:35 PM
.net

在.NET可以透過多種方式實現的zip的壓縮和解壓:1,使用System.IO.Packaging程式; 2,使用第三方類別庫; 3,透過System.IO.Compression命名空間中新增的ZipArchive ,的ZipFile類等實現 

     一,使用System.IO.Packaging程序壓縮和解壓 

     包為一個抽象類,可用於將對象組織到定義的物理格式的單個實體中,從而實現高效性與存取.ZIP檔案是包的主物理格式。其他套餐實作可以使用其他物理格式(如XML文檔,資料庫或Web服務。與文件系統類似,在分層組織的資料夾和文件中引用包中包含的項目。雖然包裝是抽象類,但Package.Open方法預設使用ZipPackage衍生類別。  
        ///新增一個資料夾及其子資料夾一個包沿著 
        /// 摘要> 
    /// 建立套件 param> 
        /// 覆蓋exsisitng檔案 param>   PackageFolder(字串資料夾名,字串compressedFileName,布林overrideExisting) 
        { 
              FOLDERNAME = folderName.Remove(folderName.Length - 1); 
            布林結果= FALSE; 
如果(Directory.Exists(文件夾名)!) 
            { 
                返回結果; 
            } 

            (!overrideExisting && File.Exists(compressedFileName))如果 
            { 
                返回結果; 
            } 
            嘗試 
            { 
                使用(套餐包= Package.Open(compressedFileName,FileMode.Create)) 
                { 
    “*”,SearchOption.AllDirectories); 
                    的foreach(在的fileList字串檔案名稱) 

                       
                        //包中的路徑是所有文件夾名後的子文件夾 
                        弦pathInPackage; 
                        pathInPackage = Path.GetDirectoryName(文件名).Replace(文件夾名,的String.Empty)+“/”+ Path.GetFileName(檔案名稱); 

                        烏里partUriDocument = PackUriHelper.CreatePartUri(新的URI(pathInPackage,UriKind.Relative)); 
                        的PackagePart packagePartDocument = package.CreatePart(partUriDocument,“”,CompressionOption.Maximum); 
                        使用(的FileStream FILESTREAM =新的FileStream (檔案名稱,FileMode.Open,FileAccess.Read)) 
                             fileStream.CopyTo(packagePartDocument.GetStream()); 
                  }   } 
                } 
                      上(例外) 
            { 
拋出新的例外(「錯誤荏蓒文件夾」資料夾名稱+,E); 
            } 
            } 
      2,且將單一檔案加入壓縮檔案中 

的程式碼///
        ///壓縮檔案成ZIP檔案作為容器店 
        /// 摘要> 
      =“compressedFileName” >歸檔檔案 param> 
        /// 覆寫現有檔案 param> 
       compressedFileName,布林overrideExisting) 
        { 
            布林結果= FALSE;  ) 
            { 
                返回結果; 
            } 

            (!overrideExisting && File.Exists(compressedFileName))如果 
            { 
                返回結果; 
            } 

            嘗試 
            { 
                烏里partUriDocument = PackUriHelper.CreatePartUri(新的URI(Path .GetFileName(檔案名稱),UriKind.Relative)); 
               
使用(套餐包= Package.Open(compressedFileName,FileMode.OpenOrCreate)) 
                {    Document)) 
                    { 
         
                    } 

          partUriDocument,“”,CompressionOption.Maximum); 
                               { 
                              } 

                     { 
               為新的例外(「錯誤壓縮與解文件」+檔案名,E);  
            回傳結果; 
        } 3,且壓縮文件解壓縮 

代碼///  
        ///提取物的容器郵編。附註:容器必須建立為開放式打包約定(OPC)規格 
        /// 摘要> 
        /// 包裝檔案 param> 
        /// 覆現有檔案 param> 
   檔案夾名,字串compressedFileName,布林overrideExisting) 
        { 
                   { 
                若的(File.Exists(compressedFileName)!)                回傳結果; 
                } 
   DirectoryInfo的(資料夾名稱); 
               與(!directoryInfo.Exists) 
directoryInfo.Create(); 

                使用(套餐包= Package.Open(compressedFileName,FileMode.Open,FileAccess.Read)) 
                { 
                    的foreach(的PackagePart的PackagePart在package.GetParts()) 
                    { 
                        ExtractPart(的PackagePart,文件夾名,overrideExisting); 
                    }           結果=真; 
            } 
                       拋出新的例外(「錯誤解壓縮檔案」+ compressedFileName,E);
            } 
            
             靜態無效ExtractPart(的PackagePart的PackagePart,在串targetdirectory中,布林overrideExisting) 
        {  p. Part.Uri.ToString())更換('\','/')。

            如果(Directory.Exists(Path.GetDirectoryName(stringPart))!) 
     

            若(!overrideExisting && File.Exists(stringPart)) 
        的FileStream FILESTREAM =新的FileStream(stringPart,FileMode.Create)) 
            { 
       
       Sharp 

代碼 
 
     
 “DLL”的ContentType =“應用程式/八位元組-stream“/> 
     
     
     
類型>同樣,如果壓縮檔案不包含[內容]的.xml文件,或者[內容]的.xml檔案不包含所對應副檔名的描述(手動新增的[內容]的.xml也是可以) ,將無法解壓縮檔案。二,使用第三方類別庫壓縮的壓縮和解壓使用比較的有SharpZipLib和DotNetZip。 

      1,SharpZipLib,也稱為“#ziplib”,基於GPL開源,支援ZIP,GZIP在內焦油和BZip2壓縮的壓縮和解壓縮。 

      支援.NET 1.1,.NET 2.0(3.5,4.0)。

      (1)ZIP壓縮 

Codepublic靜態無效的郵編(字串SRCFILE,串聯DstFile,INT緩衝區大小) 

 
    的FileStream fileStreamOut =新的FileStream 
(DstFile,FileMode.Create,FileAccess.Write); 
    ZipOutputStream zipOutStream =新ZipOutumStream(StreamOut);入門的ZipEntry =新的ZipEntry(Path.GetFileName(SRCFILE)); 
    zipOutStream.PutNextEntry(輸入); 
    INT  🠎 fileStreamIn.Read(緩衝,0,buffer.Length); 
        zipOutStream .Write(緩衝液,0,大小); 
    }而(大小> 0); 
    zipOutStream.Close(); 
    fileStreamOut.Close();的解壓縮(字串SRCFILE,串聯DstFile,INT緩衝區大小) 

    的FileStream fileStreamIn =新的FileStream 
(SRCFILE,FileMode.Open,FileAccess.Read);In 
(SRCFILE,File  ZipEntry的條目= zipInStream.GetNextEntry(); 
    的FileStream fileStreamOut =新的FileStream 
(DstFile + @“”+ entry.Name,FileMode.Create,FileAccess.Write); INT 新位元組; 
    做 
    { 
        大小= zipInStream.Read(緩衝,0,buffer.Length)    }而(大小> 0 ); 
    zipInStream.Close(); 
    fileStreamOut.Close(); 
    fileStreamIn.Close(); 
} 2,DotNetLib,是基於「使用比PL」使用元件來比較系統(系統使用比對” ZipFile =新的ZipFile()) 
  { 
    zip.AddFile(的「readme.txt」); 
    zip.AddFile(「7440-N09th.     
zip.Save(「Archive.zip」); 
  }(2)解壓縮Codeprivate無效MyExtract() 
  { 
            使用(ZIP1使用ZipFile = ZipFile.Read(zipToUnpack)) 
      { 
          //這裡,且我們擷取的每個項目,但任何條件          的foreach }(ZipEntry的E在ZIP1) 
          { 
             
       } 
    } 



    三,且.NET 4.5使用ZipArchive,的ZipFile等類別壓縮和解靜態無效的主要(字符串[] args) 
        { 
              ampleuser 萃取物”; 
字串NEWFILE = @「C:使用者exampleuser NewFile.txt」 

            使用(ZipArchive存檔= ZipFile.Open(ZipPath                Archive.CreateEntryFromFile(NEWFILE「NewEntry.txt」); 
        txt」); 
        ExtractToDirectory(ExtractPath); 
            } 
        }

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

C#的就業前景如何 C#的就業前景如何 Oct 19, 2023 am 11:02 AM

無論您是初學者還是有經驗的專業人士,掌握C#將為您的職業發展鋪平道路。

分享幾個.NET開源的AI和LLM相關專案框架 分享幾個.NET開源的AI和LLM相關專案框架 May 06, 2024 pm 04:43 PM

當今人工智慧(AI)技術的發展如火如荼,它們在各個領域都展現了巨大的潛力和影響力。今天大姚給大家分享4個.NET開源的AI模型LLM相關的專案框架,希望能為大家提供一些參考。 https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel是一種開源的軟體開發工具包(SDK),旨在將大型語言模型(LLM)如OpenAI、Azure

面向開發人員的.NET效能最佳化技術 面向開發人員的.NET效能最佳化技術 Sep 12, 2023 am 10:43 AM

如果你是.NET開發者,你必須意識到在交付高品質軟體方面,優化功能和效能的重要性。透過熟練使用提供的資源並減少網站載入時間,你不僅為使用者創造了愉快的體驗,還能減少基礎設施成本。

Java框架與.NET框架的效能差異 Java框架與.NET框架的效能差異 Jun 03, 2024 am 09:19 AM

在高並發請求處理方面,.NETASP.NETCoreWebAPI效能優於JavaSpringMVC,原因包括:AOT提前編譯,減少啟動時間;更精細的記憶體管理,由開發人員負責分配和釋放物件記憶體。

C#.NET面試問題和答案:提高您的專業知識 C#.NET面試問題和答案:提高您的專業知識 Apr 07, 2025 am 12:01 AM

C#.NET面試問題和答案包括基礎知識、核心概念和高級用法。 1)基礎知識:C#是微軟開發的面向對象語言,主要用於.NET框架。 2)核心概念:委託和事件允許動態綁定方法,LINQ提供強大查詢功能。 3)高級用法:異步編程提高響應性,表達式樹用於動態代碼構建。

高級C#.NET教程:ACE您的下一次高級開發人員面試 高級C#.NET教程:ACE您的下一次高級開發人員面試 Apr 08, 2025 am 12:06 AM

C#高級開發者面試需要掌握異步編程、LINQ、.NET框架內部工作原理等核心知識。 1.異步編程通過async和await簡化操作,提升應用響應性。 2.LINQ以SQL風格操作數據,需注意性能。 3..NET框架的CLR管理內存,垃圾回收需謹慎使用。

C#.NET:探索核心概念和編程基礎知識 C#.NET:探索核心概念和編程基礎知識 Apr 10, 2025 am 09:32 AM

C#是一種現代、面向對象的編程語言,由微軟開發並作為.NET框架的一部分。 1.C#支持面向對象編程(OOP),包括封裝、繼承和多態。 2.C#中的異步編程通過async和await關鍵字實現,提高應用的響應性。 3.使用LINQ可以簡潔地處理數據集合。 4.常見錯誤包括空引用異常和索引超出範圍異常,調試技巧包括使用調試器和異常處理。 5.性能優化包括使用StringBuilder和避免不必要的裝箱和拆箱。

.NET中的C#代碼:探索編程過程 .NET中的C#代碼:探索編程過程 Apr 12, 2025 am 12:02 AM

C#在.NET中的編程過程包括以下步驟:1)編寫C#代碼,2)編譯為中間語言(IL),3)由.NET運行時(CLR)執行。 C#在.NET中的優勢在於其現代化語法、強大的類型系統和與.NET框架的緊密集成,適用於從桌面應用到Web服務的各種開發場景。

See all articles