Silverlight 中使用 zip

Silverlight除了从资源文件加载文件进行UnZip之外,并不支持开放的Zip和UnZip操作。如果需要进行Zip和UnZip操作需要使用第三方库SharpZipLib,其提供了sl的版本,目前支持sl 3.0及其以上的sl。可参见:http://slsharpziplib.codeplex.com/releases/view/50561,以下是pmias中用到的一段代码,贴此以作备用。没有zip操作,只有unzip,参数中的zipStream来自HttpWebResponse response的response.GetResponseStream(),应用形式为直接解压通过HttpResponse返回的Stream,然后保存为文件。如果需要unzip文件可自行修改或查阅SharpZipLib的相关操作,在传参时传入zip文件的Stream即可。

using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.IO;
using ICSharpCode.SharpZipLib.Zip;
using System.Text;


namespace Navi
{
    /*
     * 钟磊 20111107
     * 
     * silverlight 中的 zip 操作
     * 其中用到第三方库:SharpZipLib.Silverlight 0.86.0.518,支持silverlight 3以上版本
     * 使用时引用库文件 SharpZipLib.Silverlight3.dll
     * http://slsharpziplib.codeplex.com/releases/view/50561
     * 
     * 注:所有传入的Stream都不在此类中关闭
     * 关闭权留给调用者
     */
    public class ZipUtil
    {
        //将zip过的stream解压后写入文件
        public static void ZipStream2File(Stream saveStream, Stream zipStream)
        {
            ZipInputStream unZipStream = new ZipInputStream(zipStream);


            //默认只有一个Entry
            ZipEntry theEntry = unZipStream.GetNextEntry();


            int size = 1024;


            byte[] newbyte = new byte[size];


            while (true)
            {
                size = unZipStream.Read(newbyte, 0, newbyte.Length);
                if (size > 0)
                {
                    saveStream.Write(newbyte, 0, size);
                }
                else
                {
                    break;
                }


            }
            //saveStream.Close();
            unZipStream.Close();
            //zipStream.Close();
        }


        //将Stream直接写入文件
        public static void Stream2File(Stream saveStream, Stream responseStream)
        {
            int size = 1024;
            byte[] newbyte = new byte[size];
            while (true)
            {
                size = responseStream.Read(newbyte, 0, newbyte.Length);
                if (size > 0)
                {
                    //写入数据
                    saveStream.Write(newbyte, 0, size);
                }
                else
                {
                    break;
                }
            }
            //responseStream.Close();
            //saveStream.Close();
        }


        //从一个zip格式的stream中unzip出字符串
        public static string ZipStream2String(Stream zipStream)
        {
            ZipInputStream unZipStream = new ZipInputStream(zipStream);


            //打开zip文档中的一个Entry,此句必须要有
            ZipEntry theEntry = unZipStream.GetNextEntry();


            int size = 1024;


            byte[] newbyte = new byte[size];


            StringBuilder sb = new StringBuilder();
            String strTmp;
            while (true)
            {
                size = unZipStream.Read(newbyte, 0, newbyte.Length);
                if (size > 0)
                {
                    strTmp = Encoding.UTF8.GetString(newbyte, 0, size);
                    sb.Append(strTmp);
                }
                else
                {
                    break;
                }


            }


            unZipStream.Close();
            //zipStream.Close();


            return sb.ToString();
        }


        //从Stream中读取字符串
        public static string Stream2String(Stream responseStream)
        {
            StreamReader readStream = new StreamReader(responseStream, Encoding.UTF8);
            string result = readStream.ReadToEnd();
            readStream.Close();
            //responseStream.Close();


            return result;
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值