2011-04-26 29 views
3

我在Windows Phone 7項目中有一個zip文件。我已經將生成操作設置爲內容並將複製到輸出目錄設置爲始終。該zip文件包含文件夾結構。我希望完全複製它,因爲它在我的電話項目中。我正在使用SharpZipLib。這是代碼: -如何提取Windows Phone 7中的zip文件?

Stream stremInfo = Application.GetResourceStream(new Uri("xip.zip", UriKind.Relative)).Stream; 



     new FastZip(). ExtractZip(stremInfo, 
      "",FastZip.Overwrite.Always,null,null,null,true,true); 

但是,我調用ExractZip時出錯。我得到的例外是「MethodAccessException」。不能撥打GetFullPath()。有誰能讓我知道我錯過了什麼?我能做些什麼來避免它?

回答

1

我使用SharpZipLib的SL端口來做到這一點 - 看http://slsharpziplib.codeplex.com/

有大量的示例代碼可如何使用它 - 在它們的來源一個很好的快速入門 - http://slsharpziplib.codeplex.com/SourceControl/changeset/view/75568#1416103

+0

slsharpziplib is可憐。我嘗試了整整一天,無法完成它的工作。當我調用IsolatedFastZip()的CreateZip方法時,我得到的只是一些例外。 wilbev的建議是最好的,當你想要做的就是解壓縮內容,而不會浪費太多時間閱讀文檔和API。這個課程非常簡單,工作安靜。 – TCM 2011-04-26 18:23:58

+0

對不起 - 但有用 - 聽到你有這麼多問題。 ICSharpZipLib是一個「老朋友」 - 我在「十個」項目中使用過它 - 但我承認我的代碼主要是關於「內存」解壓縮感謝反饋 - 如果我發現自己需要「基於磁盤」的壓縮,那麼我看看另一個項目,節省時間。 – Stuart 2011-04-27 14:34:46

7

如果您知道要從Zip中取出什麼文件,則不需要使用其他庫。您可以使用App.GetResourceStream手機API訪問Zip並獲取文件。

void MainPage_Loaded(object sender, RoutedEventArgs e) 
{ 
    WebClient client = new WebClient(); 
    client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted); 
    client.OpenReadAsync(new Uri("http://www.foo.com/pictures.zip")); 
} 

void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) 
{ 
    StreamResourceInfo info = new StreamResourceInfo(e.Result,""); 
    StreamResourceInfo pic = App.GetResourceStream(info, new Uri("IMG_1001.jpg", UriKind.Relative)); 

    BitmapImage bitmap = new BitmapImage(); 
    bitmap.SetSource(pic.Stream); 
    img.Source = bitmap; 
} 

欲瞭解更多有關閱讀文件列表的郵件檢出this blog post

+1

我知道這個方法。但是,我的zip包含我不知道的文件夾。 – TCM 2011-04-27 02:20:32

+0

此方法的另一個限制:我相信(但沒有確認)GetResourceStream()方法創建一個內部MemoryStream(將整個文件加載到內存中)。當使用GetResourceStreawm()和WP8上的大型.zip文件時,我得到OutOfMemoryExceptions,但小文件工作正常。 – 2013-02-27 08:28:31