Windows Phone 7 中解压zip包

目前项目中需要从服务器端下载ZIP包然后解压获取里面的文件,先做下记录,给后来者一些帮助。

首先从 http://slsharpziplib.codeplex.com/ 获取 SharpZipLib.WindowsPhone7.dll

添加引用

< phone:PhoneApplicationPage 
    
x:Class ="PhoneApp4.MainPage"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone
="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell
="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d
="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc
="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable
="d"  d:DesignWidth ="480"  d:DesignHeight ="768"
    FontFamily
=" {StaticResource PhoneFontFamilyNormal} "
    xmlns:my
="clr-namespace:PhoneApp4"
    FontSize
=" {StaticResource PhoneFontSizeNormal} "
    Foreground
=" {StaticResource PhoneForegroundBrush} "
    SupportedOrientations
="Portrait"  Orientation ="Portrait"
    shell:SystemTray.IsVisible
="True" >

     < Grid  x:Name ="LayoutRoot"  Background ="Transparent" >
         < Image  Height ="347"  HorizontalAlignment ="Left"  Margin ="38,35,0,0"  Name ="image1"  Stretch ="Fill"  VerticalAlignment ="Top"  Width ="270"   />
         < Button  Content ="download"  Height ="72"  HorizontalAlignment ="Left"  Margin ="38,432,0,0"  x:Name ="btnLoad"  VerticalAlignment ="Top"  Width ="203"  Click ="btnLoad_Click"   />
         < my:ProgressBarWithText  x:Name ="progressBarWithText"  Text ="正在努力加载中..."  VerticalAlignment ="Top"  Foreground =" {StaticResource PhoneAccentBrush} " />
     </ Grid >
</ phone:PhoneApplicationPage >

后台代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using System.Net.NetworkInformation;
using ICSharpCode.SharpZipLib.Zip;
using System.IO.IsolatedStorage;
using System.IO;

namespace PhoneApp4
{
     public  partial  class MainPage : PhoneApplicationPage
    {
         //  构造函数
         public MainPage()
        {
            InitializeComponent();
        }

         private  void btnLoad_Click( object sender, RoutedEventArgs e)
        {
            Button btn = sender  as Button;
             if (NetworkInterface.GetIsNetworkAvailable())
            {
                btn.IsEnabled =  false;
                WebClient client =  new WebClient();
                progressBarWithText.ShowProgress =  true;
                client.OpenReadAsync( new Uri( " http://files.cnblogs.com/youhui/2012-04/20120405.zip ", UriKind.Absolute));
                client.OpenReadCompleted += (a, b) =>
                {
                     // 解压下载的ZIP包
                     if ( null == b.Error && !b.Cancelled)
                    {
                         using (ZipInputStream zipInputStream =  new ZipInputStream(b.Result))
                        {
                            ZipEntry zipEntry;
                             byte[] data =  new  byte[ 2048];
                             int size =  2048;
                             while ((zipEntry = zipInputStream.GetNextEntry()) !=  null)
                            {
                                 if (zipEntry !=  null)
                                {
                                     string fName = zipEntry.Name;
                                     if (fName != String.Empty && fName.Contains( " .jpg "))
                                    {
                                        IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication();
                                         string path =  " download ";
                                         if (!Directory.Exists(path))
                                        {
                                            isf.CreateDirectory(path);
                                        }
                                         using (IsolatedStorageFileStream fileStream =  new IsolatedStorageFileStream(System.IO.Path.Combine(path +  " \\ ", fName.Substring(fName.LastIndexOf( " / ") +  1, fName.Length - fName.LastIndexOf( " / ") -  1)), FileMode.OpenOrCreate, isf))
                                        {
                                             while ( true)
                                            {
                                                size = zipInputStream.Read(data,  0, data.Length);
                                                 if (size <=  0)
                                                     break;
                                                fileStream.Write(data,  0, size);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        btn.Content =  " 已下载 ";
                        MessageBox.Show( " 下载完成 ");
                    }
                    progressBarWithText.ShowProgress =  false;
                };
            }
             else
            {
                MessageBox.Show( " 当前设备没有网络连接! ");
            }
        }
    }
}

运行点击下载按钮:

Windows Phone 7 中解压zip包_第1张图片

Windows Phone 7 中解压zip包_第2张图片

IsoStoreSpy查看模拟器是否真的下载成功

Windows Phone 7 中解压zip包_第3张图片

ok,搞定

 

你可能感兴趣的:(windows,phone)