17 Apr 2008 @ 5:39 下午 
 

使用.NET压缩文件

 

貌似10几天都没有更新了, 因为正在苦练F#内功心法, 同时还要现学现用完成一个S/C模式的管理系统, 实在是有些心力不足.

.NET命令空间System.IO.Compression提供了基本的流压缩实现, 其中包含RFC文档中规定的DeflateGZip两种算法.

两种算法有许多相同点:

  • 不涉及专利使用权
  • 采用LZ77 算法和霍夫曼编码 (压缩率基本相同)
  • 无损压缩
  • 重复压缩只会导致体积更大
  • 不能用于压缩大于 4 GB 的文件
  • 原本并不提供向 .zip 存档中添加或提取文件

也有一些区别:

  • GZip包括一个检测数据损坏的循环冗余校验值
  • GZip压缩后的文件可以用大多数解压缩软件打开

总的来讲, GZip略胜一筹. 下面是F#代码:

 
#light
 
open System.IO
open System.IO.Compression
 
// GZip压缩文件
// 参数: 文件名 字据
let GZipWrite (filename : string) (data : string) =
    // 创建文件流
    use fileStream = new FileStream(filename, FileMode.Create, FileAccess.Write)
    // 创建压缩流
    use compressionStream = new GZipStream(fileStream, CompressionMode.Compress)
    use writer = new StreamWriter(compressionStream)
    // 将数据写入流中
    writer.Write(box data)
    writer.Close()
// GZip解压文件
// 参数: 文件名
// 返回: 数据
let GZipRead filename =
    use fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read)
    use compressionStream = new GZipStream(fileStream, CompressionMode.Decompress)
    use reader = new StreamReader(compressionStream)
    let data = reader.ReadToEnd()
    reader.Close()
    data
Tags Tags:
Categories: 编程
Posted By: colder
Last Edit: 01 Aug 2008 @ 08 04 上午

E-mailPermalink
 

Responses to this post » (None)

 


Comments are open. Feel free to leave a comment below.


 

Leave A Comment ...

 

 XHTML:
You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
\/ More Options ...
Change Theme...
  • Role »
  • Posts »
  • Comments »
Change Theme...
  • VoidVoid (Default)
  • LifeLife
  • EarthEarth
  • WindWind
  • WaterWater
  • FireFire
  • LiteLightweight
  • No Child Pages...