<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      代碼改變世界

      .NET開源項目的前世和今生系列 之 .NET開源壓縮文檔處理的前世和今生

      2009-12-25 14:56  靈感之源  閱讀(6634)  評論(32)    收藏  舉報

      這是《.NET開源項目的前世和今生系列》之一,如上一篇《.NET開源數據庫的前世和今生》。這些系列是我對過去10年中了解的.NET開源項目的總結。

       

      《.NET開源項目的前世和今生系列》的大概結構如下(假如我還有心思寫下去的話):

      • .NET開源數據庫的前世和今生》 上、下
      • 《.NET開源文檔處理的前世和今生》:壓縮、Office(Word/Excel/PPT/MAPI)、其它(PDF/RTF)
      • 《.NET開源多媒體處理的前世和今生》:圖像、圖標、視頻、音頻、Flash等
      • 《.NET開源基礎庫的前世和今生》:Queue、Schedule
      • 《.NET開源網絡訪問的前世和今生》:Web服務器、爬蟲、MSN、XMPP、IRC、NNTP、統計
      • 《.NET開源系統交互與安全的前世和今生》:環境/進程/安全/認證

       

       

      前言

      開發行業很多開源的項目,歷史我不在這里追溯,既然那么多有心有力的朋友分享了他們的成果,在遵循許可的情況下,我們拿來用就是了。當然,你可以寫比開源的更好更適合自己的,但擺著現成的不用那可是罪過啊。不過選擇開源項目需要考慮很多:1.項目的協議,會不會造成代碼污染;2.項目的生命力,說不定明天作者就不干了,又或者作者過著逍遙自在的生活,幾年都不更新一次,你自己接著開發?

       

       

      正題

       

      Zip

      好吧,相信大部分人都知道.NET Zip Library #ziplib (SharpZipLib),這是SharpDevelop的之父Mike Krueger在寫SharpDevelop的副產物。目的很單純:就是想弄個純c#的讀寫zip的,不想用InterOp。我之前說過,做開源項目的,多是重口味的。SharpZipLib使用非常廣泛,幾乎每個需要用到壓縮文檔的.NET程序都會選擇它。它很優秀,確實,雖然在初期對中文支持不好。雖然它的“雙性”許可比較讓人糊涂。但有好事者反復在論壇上問SharpZipLib的許可,作者也坐不住了,在了那套首頁特別說明了,LGPL,商業免費。早說嘛,程序員都喜歡瞎折騰。

       

      既然SharpZipLib那么優秀,那為什么別人還寫類似的呢?因為除了重口味,還有輕口味的需求:部分程序還是輕量級的,譬如我。一般需求就是:壓縮、解壓Zip文檔,或者只是壓縮、解壓一個byte數組。在.NET 2.0之前的1.X時代,我們只能用:Interop + Zlib:#zlib - Modifying Archives。但有一些潔癖的,覺得額外用一個Win32的dll很不爽。所以便有了純C#的ZLIB.NET。如果你只是想壓縮byte數組:Better Than Zip Algorithm For Compressing In-Memory Data。在.NET 2.0,引入了System.IO.Compression.DeflateStream和System.IO.Compression.GZipStream。

       

      如果你想壓縮文檔:ZipStorer - A Pure C# Class to Store Files in Zip,它還在這里弄了個項目:ZipStorer - A Pure C# Class to Store Files in Zip ,但有一個很要命的問題:它不支持壓縮。當然還有支持壓縮的:Encrypted Zipping of Files in C# and Java。

       

      在.NET 3.x,微軟的腦筋終于通了,引入了文檔壓縮:.NET Framework Zip / UnZip Tool Using the Packaging Namespace

       

      重口味的,還有用J#自帶的來弄的,如:Zip/Unzip using java.util.zip .net namespace and moreZip and Unzip from a C# program using J# runtime 、Simple Application to Zip and UnZip files in C# using J#,也有用Windows系統的:Compress Zip files with Windows Shell API and C#

       

      如果你純粹要求一個足夠強大的Zip文檔壓縮讀寫庫,我建議你用DotNetZip Library 。它具備了ZIP的所有操作,也很彈性,誰用誰知道~

       

      除了基本的文檔壓縮之外,還衍生出了開發項目的自動壓縮,如:ZipStudio - A versatile Visual Studio add-in to zip up Visual Studio solutions and projects(項目:ZipStudio ) 、SolutionZipper: VS 2005 Add-in Cleans and Zips a Solution in One Step、Zip Solution 、SolZipBackup Project Files to Gmail ,當然還有Extracting files from a remote ZIP archive這種特別的需求。當然,還有更特殊的癖好:.NET wrapper for Info-ZIP。

       

      Cab

      7Zip支持Cab,但我們或許不需要那么大的東西,我們只需要:Cabinet File (*.CAB) Compression and Extraction。很不幸,這也是Interop,而且還是用vc++ .net封裝的。但我們也有Jim Mischel直接C#封裝的:Accessing CAB Files from .NET 。

       

      7Zip

      SharpZipLib不支持RAR、ISO、7z、Arj、Cab、Rpm、Wim、Udf、Xar、Dmg等等,等等。天啊,原來SharpZipLib這么差的。。。如果你了解7Zip,其實這些就是7Zip所支持的格式。7Zip是用C寫的,為Win32系統提供了COM接口。所以我們也只能用Interop了(我討厭Interop!)。第一個吃螃蟹的是Eugene Sichkar,他寫完 C# (.NET) Interface for 7-Zip Archive DLLs(項目:7zSharp ),繼承了光榮的開源傳統,不更新了。不過有另外一個牛人接過了他的衣缽:SevenZipSharp。當然,你還可以用純C#讀取7z格式:Port of 7zip archive reader to C#

       

      RAR

      你可以用RAR官方的SDK(UnRAR.dll)中包含的C#例子來讀取,也可以用7Zip來讀取RAR,但如果你需要純C#的,這里有一個新鮮出爐的:NUnrar,第一版是不支持中文,而且文件名讀取邏輯錯誤。我提出了之后,作者很快就修正了,可見部分外國的開源作者還是很閑的。。。除了讀取,除非給你錢RAR的作者,否則你不能生成RAR文件,專利,有些時候讓你很不爽;)

       

      你想生成RAR又不想給錢?那可以:

      string winRAR = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + @"\WinRAR\WinRAR.exe";

      StringBuilder command 
      = new StringBuilder(" a -ep \"" + RARFile + "\" ");
      for (int i = 0; i < Files.Count; i++)
      {
         command.Append(
      "\"" + Files[i] + "\" ");
      }
      ProcessStartInfo info 
      = new ProcessStartInfo(winRAR, command.ToString());
      Process process 
      = new Process();
      process.StartInfo 
      = info;
      process.Start();
      process.WaitForExit();

       


      當然,你還得先判斷一下winrar.exe是否存在。

       

      Tar

      SharpZipLib可以對Tar進行讀寫,另外,你還可以選擇:tar-cs 

       

      ISO、VHD、VDI、 XVA、VMDK

      SharpZipLib可以對ISO進行讀寫,你還可以用C# ISO image creator 來創建ISO,GomuIso9660 來讀寫。另外,還有更專業的:.NET DiscUtils ,除了ISO,它可以讀寫VHD, VDI, XVA, VMDK等各種虛擬機的文件!

       

      MTF

      MTF,就是Microsoft Tape Format,你可以用Reading MTF Backup Files來讀取。

       

       

      題外話

      不要把壓縮文件想得太復雜了,不同的格式雖有差異,但大體都是:一個總的文件頭,記錄多少個文件,偏移,大小等,然后是多個文件頭(文件名、壓縮前后大小、校驗碼等),最后就是壓縮后的數據了。所以,主要差異還是文件頭和壓縮算法。

       

      除了.zip,.cbz、.jar、.xap、Visual Studio的模板文件等等都是zip文件,只不過擴展名不一樣罷了。同樣,.cbr也是rar文件。

       

      主站蜘蛛池模板: 国产精品一二区在线观看| 亚洲暴爽av天天爽日日碰| 四虎成人精品无码永久在线| 四虎国产精品免费久久| 久久久av波多野一区二区| 九九热视频精选在线播放| 国产不卡在线一区二区| 国产欧美日韩亚洲一区二区三区| 亚洲丰满熟女一区二区蜜桃| 忘忧草影视| 日韩一区二区在线看精品| 国产办公室秘书无码精品99| av无码小缝喷白浆在线观看| 久久精品无码专区免费东京热 | 精品国产福利一区二区在线 | 日本视频一两二两三区| 老鸭窝在线视频| 久久九九精品99国产精品| 婷婷色香五月综合缴缴情香蕉| 2019国产精品青青草原| 人妻中文字幕不卡精品| 国产精品一二三区久久狼| 国产极品粉嫩福利姬萌白酱| 最近中文字幕完整版hd| 国产99久一区二区三区a片| 国产亚洲精品综合一区二区| 久久亚洲精品11p| 天堂V亚洲国产V第一次| 亚洲成亚洲成网| 国产精品午夜福利91| 四虎成人在线观看免费| 久久人妻精品大屁股一区| 宝坻区| 婷婷久久香蕉五月综合加勒比| 无码一区二区三区av在线播放| 久久精品国产亚洲AV瑜伽| 亚洲欧美综合人成在线| 日本高清在线播放一区二区三区| 久热这里有精品视频在线| 国产另类ts人妖一区二区| 巨爆乳中文字幕爆乳区|