从isolatedstorage中提取zip文件

时间:2012-07-31 14:23:10

标签: c# silverlight windows-phone-7 zip isolatedstorage

我遇到了这个问题 - 显然,我做错了。

首先,我通过WebClient下载一个zip文件并将其存储到IsolatedStorage:

using (var isf = IsolatedStorageFile.GetUserStoreForApplication()) 
{ 
    if (!isf.DirectoryExists("AppData")) isf.CreateDirectory("AppData"); 
    using (StreamWriter sw = new StreamWriter(new IsolatedStorageFileStream("AppData\\" + FileName, FileMode.OpenOrCreate, isf))) 
    { 
        sw.Write(new StreamReader(e.Result).ReadToEnd()); 
    } 
}

接下来,我从WebClient响应(zip文件)中提取一个特定文件:

Uri fileUri = new Uri("content.txt", UriKind.Relative); 
StreamResourceInfo info = new StreamResourceInfo(e.Result, null); 
StreamResourceInfo streamInfo = System.Windows.Application.GetResourceStream(info, fileUri); 

这可以按预期工作。稍后,我想从IsolatedStorage中的zip文件中提取“content.txt”:

using (IsolatedStorageFileStream isfs = isf.OpenFile("AppData\\" + FileName, FileMode.Open, FileAccess.Read)) 
{ 
    if (myIsolatedStorage.FileExists("AppData\\" + FileName)) 
    { 
        Uri fileUri = new Uri("content.txt", UriKind.Relative); 
        StreamResourceInfo info = new StreamResourceInfo(isfs, null); 
        StreamResourceInfo streamInfo = System.Windows.Application.GetResourceStream(info, fileUri); 
    } 
} 

虽然可以找到zip存档,但streamInfo始终为null。我做错了什么?

1 个答案:

答案 0 :(得分:1)

不幸的是,与桌面.Net框架不同,Windows Phone 7.x框架不知道如何从压缩文件流式传输。实际上,在Windows Phone上,根本无法访问System.IO.Compression命名空间。

幸运的是,DotNetZip库适用于WP7应用程序。您将需要使用Compact Framework二进制DLL,而不是Silverlight二进制DLL。

,Visual Studio会在添加引用时抱怨库可能不兼容,但它可以正常工作。