【问题标题】:How do I extract zip file in Windows Phone 7?如何在 Windows Phone 7 中提取 zip 文件?
【发布时间】:2011-04-26 03:52:30
【问题描述】:

我的 Windows Phone 7 项目中有一个 zip 文件。我已将构建操作设置为内容并将复制到输出目录设置为始终。 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()。谁能让我知道我错过了什么?我可以做些什么来避免它?

【问题讨论】:

    标签: silverlight windows-phone-7 sharpziplib


    【解决方案1】:

    如果您知道要从 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 读取文件列表的更多信息,请查看this blog post

    【讨论】:

    • 我知道这个方法。但是我的 zip 包含我不知道的文件夹。
    • 此方法的另一个限制:我相信(但尚未确认)GetResourceStream() 方法会创建一个内部 MemoryStream(将整个文件加载到内存中)。在 WP8 上使用带有大 .zip 文件的 GetResourceStreawm() 时出现 OutOfMemoryExceptions,但小文件可以正常工作。
    【解决方案2】:

    【讨论】:

    【解决方案3】:

    我已使用 SharpZipLib 的 SL 端口来执行此操作 - 请参阅 http://slsharpziplib.codeplex.com/

    有很多示例代码可用于说明如何使用它 - 并且在其源代码中提供了一个很好的快速入门 - http://slsharpziplib.codeplex.com/SourceControl/changeset/view/75568#1416103

    【讨论】:

    • slsharpziplib 是可悲的。我尝试了一整天,但无法正常工作。当调用 IsolatedFastZip() 的 CreateZip 方法时,我得到的只是某种异常。当您想要做的只是解压缩内容而不浪费太多时间阅读文档和 API 时,wilbev 的建议是最好的。这门课真的很简单,而且工作安静。
    • 很抱歉 - 但很有用 - 听说您遇到了这么多问题。 ICSharpZipLib 是一个“老朋友”——我在“数十个”项目中使用过它——但不可否认,我的代码主要是关于“内存中”解压缩感谢您的反馈——如果我发现自己需要“基于磁盘”的压缩,那么我'将看看其他项目并节省自己的时间。
    猜你喜欢
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    相关资源
    最近更新 更多