Windows Phone 7 中解壓zip包

來源:互聯網
上載者:User

目前項目中需要從伺服器端下載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("當前裝置沒有網路連接!");
            }
        }
    }
}

運行點擊下載按鈕:

用IsoStoreSpy查看模擬器是否真的下載成功

ok,搞定

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.