Silverlight 的解压缩之Zip in Zip

.Net下的经典的SharpZipLib已经发布Silverlight4版本,可以到Codeplex下载。

如何创建在Zip中在创建Zip内,这个需求非常好,因为Silverlight现在还没有类似Select Folder Dialog。

1. 定义SaveFileDialog …

说废话,遭人骂

2. 获取File stream 并传递给 ZipOutputStream (zip的流),创建rootZipStream

             if (SaveFileDialog.ShowDialog().Value)

            {

                System.IO.Stream fileStream = SaveFileDialog .OpenFile();

                ZipOutputStream rootZipStream = new ZipOutputStream(fileStream);

                rootZipStream .SetLevel(6);   // 常规的压缩比

                rootZipStream .IsStreamOwner = true;

                …..


3. 定义ZipEntry (相当于里面的Zip里面的一个文件),构造函数就是文件名,其实就是定义一个FileInfo。将你的数据转换为bytes。(网上方法超多)

                    bytes[] buffer = …

                    ZipEntry jpgEntry = new ZipEntry(FileName)

                    {

                        DateTime = DateTime.Now,

                        Size = buffer.Length

                    };


4. 定义内部的ZipOutputStream,同上,不过要传入一个空的MemoryStream。

                    MemoryStream innerZipStream = new MemoryStream();

                    ZipOutputStream innerZip = new ZipOutputStream(innerZipStream);

                    innerZip.SetLevel(6);

                    innerZip.IsStreamOwner = true;


5. 将你的byte[]们对应的ZipEntry 们 交给innerZipStream

                    innerZip.PutNextEntry(docEntry);

                    innerZip.Write(docBuffer, 0, docBuffer.Length);

 

                    innerZip.PutNextEntry(jpgEntry);

                    innerZip.Write(jpgBuffer, 0, jpgBuffer.Length); // 有几个传几个

                    innerZip.Finish(); // 这个别忘记,否则就出现 “压缩末端不可预料”什么玩意,呵呵


6. 为innerZipStream创建ZipEntry,交给rootZipStream。最后Finish and Close

                    ZipEntry innerZipEntry = new ZipEntry(string.Format("{0}.zip", yourInnerZipName))
                    {
                        DateTime = DateTime.Now,
                        Size = innerZip.Length
                    };

                    rootZip.PutNextEntry(innerZipEntry);

                    rootZip.Write(
                        this.StreamToBuffer(innerZipStream),
                        0,
                        (int)innerZipStream.Length);

                    innerZipStream.Close();

 

                    rootZipStream.Finish();
                    rootZipStream.Close();


 

总之,原理很简单,很多细节要注意,呵呵。 转载注明出处哦 O(∩_∩)O~

转载于:https://www.cnblogs.com/Ruiyi/archive/2010/09/01/1815023.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值