1

我被这个问题困住了——显然,我做错了什么。

首先,我通过 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 始终为空。我究竟做错了什么?

4

1 回答 1

1

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

幸运的是,DotNetZip库适用于 WP7 应用程序。您需要使用 Compact Framework 二进制 DLL,而不是 Silverlight 的。添加引用时,Visual Studio 会抱怨库可能不兼容,但它会正常工作。

于 2012-07-31T18:48:26.753 回答