目前项目中需要从服务器端下载ZIP包然后解压获取里面的文件,先做下记录,给后来者一些帮助。
首先从 http://slsharpziplib.codeplex.com/ 获取 SharpZipLib.WindowsPhone7.dll
添加引用
后台代码:
首先从 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("当前设备没有网络连接!");
- }
- }
- }
- }