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] 举报,一经查实,本站将立刻删除。