如何在Windows Phone 7中解压缩文件?

3

我在我的 Windows Phone 7 项目中有一个 zip 文件。我已经将生成操作设置为 Content,输出目录设置为始终复制。zip 文件包含文件夹结构。我希望这个文件夹结构完整地复制到我的手机项目中。我正在使用 SharpZipLib 来实现。以下是代码:

 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()。请问有谁知道我错过了什么? 我应该怎么做才能避免这个错误?

3个回答

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;
}

如果您想要了解如何从Zip文件中读取文件列表,请参考这篇博客文章


1
我知道这个方法。但是我的压缩包里包含了我不知道的文件夹。 - TCM
该方法的另一个限制是:我相信(但尚未确认)GetResourceStream()方法会创建一个内部MemoryStream(将整个文件加载到内存中)。在WP8上使用GetResourceStreawm()处理大型.zip文件时,会出现OutOfMemoryExceptions,但使用小文件则正常。 - Jay Borseth

4

1
+1:您可能还想查看博客的更新内容(博客中的链接已损坏)http://www.sharpgis.net/2010/08/default.aspx - AnthonyWJones

1

slsharpziplib太糟糕了。我试了一整天都没能让它工作。当调用IsolatedFastZip()的CreateZip方法时,我只得到了某种异常。如果你只想解压缩内容而不浪费太多时间阅读文档和API,那么wilbev的建议是最好的。这个类非常简单,可以很好地完成工作。 - TCM
很抱歉听到你遇到了这么多问题,但这也是有用的。ICSharpZipLib是一个“老朋友”,我在“数十个”项目中使用过它,但我承认我的代码大多是关于“内存”解压缩的。感谢您的反馈 - 如果我发现自己需要“基于磁盘”的压缩,那么我会看看其他项目并节省时间。 - Stuart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接