標籤:style class blog c code java
在做移動端時,當我們需要從伺服器獲得多個檔案時,為了節約流量,伺服器一般會返回一個壓縮包,那我們就是下載完成後,在手機中進行解壓到指定位置
SharpCompress就是可以在手機中進行解壓一個類庫(.net),在codeplex是開源,支援案頭端和移動端
點擊下載最新版本 查看支援內容 API使用樣本
下面我們看一下在windows phone中使用其進行解壓ZIP包
public async void DownloadAndUnCompress() { string strUrl = "http://qd.baidupcs.com/file/3ebe6e988584733fba61c04e9568bc73?fid=3860865449-250528-923682234289515&time=1401003314&sign=FDTAXER-DCb740ccc5511e5e8fedcff06b081203-sDvdhrr7p1EWhMUFNOaYlQbwLmE%3D&to=qb&fm=Q,B,U,nc&newver=1&expires=1401003914&rt=sh&r=347257022&logid=3996325361&sh=1&vuk=3860865449&fn=SharpCompress0.10.3.zip"; await Task.Run(() => { WebClient wc = new WebClient(); wc.OpenReadAsync(new Uri(strUrl, UriKind.Absolute)); wc.DownloadProgressChanged += (s, dpce) => { System.Diagnostics.Debug.WriteLine("已下載" + dpce.ProgressPercentage + "%"); }; wc.OpenReadCompleted += (s, orce) => { if (orce.Error != null) { System.Diagnostics.Debug.WriteLine("下載出錯"); return; } using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication()) { var zipArchive = ArchiveFactory.Open(orce.Result);//建立一個解壓器 foreach (var entry in zipArchive.Entries)//提取裡面每個實體,包括檔案夾都算實體 { //如果為檔案夾先把檔案夾建立出來 if (entry.IsDirectory) { if (!storage.DirectoryExists(entry.FilePath)) { storage.CreateDirectory(entry.FilePath); } continue; } //entry.FilePath 為檔案的全路徑 using (IsolatedStorageFileStream isofilestream = storage.CreateFile(entry.FilePath)) { //寫入到隔離儲存區 (Isolated Storage)空間中 entry.WriteTo(isofilestream); } } zipArchive.Dispose(); System.Diagnostics.Debug.WriteLine("解壓完成"); } }; }); }
其它的如RAR、Tar、GZip、7Zip可參考codeplex官方文檔