微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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,newbyte.Length);                 if (size > 0)                 {                     saveStream.Write(newbyte,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,newbyte.Length);                 if (size > 0)                 {                     //写入数据                     saveStream.Write(newbyte,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,newbyte.Length);                 if (size > 0)                 {                     strTmp = Encoding.UTF8.GetString(newbyte,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;         }     } }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐