日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

压缩解压缩

發布時間:2023/12/4 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 压缩解压缩 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

核心庫NewLife.Core內置了壓縮相關功能擴展,并且獨立實現的ZipFile還支持.NET2.0和.NET4.0,該類在.NET4.5以后成為.NET Framework框架標配。

數據流壓縮

IOHelper類擴展了字節數組和數據流的壓縮擴展方法

Byte[] Compress(this Byte[] data); Byte[] Decompress(this Byte[] data); Stream Compress(this Stream inStream, Stream outStream = null); Stream Decompress(this Stream inStream, Stream outStream = null); Stream CompressGZip(this Stream inStream, Stream outStream = null); Stream DecompressGZip(this Stream inStream, Stream outStream = null);

從.NET2.0開始,就內置了Deflate壓縮算法,這是很常見的一種數據壓縮算法,HTTP常用它進行壓縮,壓縮比一般,但是壓縮速度很好。上述字節數組和數據流的擴展就是對DeflateStream的簡單封裝,以兼容.NET2.0之上的所有應用(不同NFX版本的DeflateStream用法有所不同)。

而GZip則是一種數據格式,多了個頭部,數據體部分還是Deflate壓縮。因此,數據流壓縮直接用Deflate算法,而壓縮為文件時,則使用GZip,一般用gz后綴。

例如,XCode導出整表數據時,為了減小文件大小,會直接輸出到用GZipStream包裝的文件流。

文件壓縮

PathHelper類擴展了文件和目錄的壓縮及解壓縮。

void Extract(this FileInfo fi, String destDir, Boolean overwrite = false); void Compress(this FileInfo fi, String destFile); void Compress(this DirectoryInfo di, String destFile = null);

Extract把壓縮文件解壓縮到目標目錄,支持覆蓋已存在文件。一般用于壓縮備份和數據恢復場合。

(注意:.zip后綴文件采用ZipFile類處理,其它后綴僅支持在Windows上調用7z處理,下同)

Compress把文件壓縮到目標文件,一般用于壓縮備份日志等文本文件,有很大的壓縮比。

Compress另一個重載,把目錄壓縮到目標文件,一般用于壓縮備份整個目錄,如配置文件目錄等。

ZipFile壓縮

Zip壓縮文件實現類ZipArchive,而ZipFile擴展了常用方法。

// 打開壓縮文檔 ZipArchive Open(String archiveFileName, ZipArchiveMode mode, Encoding entryNameEncoding = null); // 從目錄創建壓縮文檔 void CreateFromDirectory(String sourceDirectoryName, String destinationArchiveFileName, CompressionLevel compressionLevel, Boolean includeBaseDirectory);

壓縮文件:

using var zip = ZipFile.Open(destFile, ZipArchiveMode.Create); zip.CreateEntryFromFile(fi.FullName, fi.Name, CompressionLevel.Optimal);

解壓縮文件:

using var zip = ZipFile.Open(fi.FullName, ZipArchiveMode.Read, null); var di = Directory.CreateDirectory(destDir); var fullName = di.FullName; foreach (var item in zip.Entries) {var fullPath = Path.GetFullPath(Path.Combine(fullName, item.FullName));if (!fullPath.StartsWith(fullName, StringComparison.OrdinalIgnoreCase))throw new IOException("IO_ExtractingResultsInOutside");if (Path.GetFileName(fullPath).Length == 0){if (item.Length != 0L) throw new IOException("IO_DirectoryNameWithData");Directory.CreateDirectory(fullPath);}else{Directory.CreateDirectory(Path.GetDirectoryName(fullPath));try{item.ExtractToFile(fullPath, overwrite);}catch { }} }

Zip文件本質上就是一個檔案數據庫,頭部有目錄,后面就是各個被壓縮文件的數據。通過擴展方法或者構造函數拿到ZipArchive后,直接CreateEntry就可以加入要壓縮的文件,或者遍歷Entries集合就得到內部每個被壓縮文件。

7z壓縮

SevenZip類用于對7z.exe進行包裝,在Windows上處理各種類型壓縮文件,它擁有極高的壓縮比,在某些維護性系統中具有無可比擬的優勢。

SevenZip首先在附近目錄查找7z.exe,然后在注冊表查找安裝路徑,實在找不到就從X組件資源站下載 http://x.newlifex.com/7z_v16.04.zip 。

總結

以上是生活随笔為你收集整理的压缩解压缩的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。