目前項目中需要從伺服器端下載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,搞定