【发布时间】:2014-02-10 07:18:59
【问题描述】:
我想将 zip 文件从服务器直接保存到隔离存储,但我面临的问题是当我尝试使用以下代码保存时,由于我的文件大小有时 > 150 MB,我出现内存不足异常.所以我发布了一个问题here,建议是
您可以将此类文件直接下载到 IsolatedStorage,但如果您想将其放入内存 - 可能会出现问题。
那么我怎样才能将文件从服务器直接保存到隔离存储而不保存到内存。 我使用的代码贴在这里
client = new WebClient();
client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);
client.OpenReadAsync(new Uri(fileurl), objRef);
private async void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
var file = IsolatedStorageFile.GetUserStoreForApplication();
if (!file.DirectoryExists("Folderpath/Files"))
{
file.CreateDirectory("Folderpath/Files");
}
string hpubFile = "/Folderpath/Files/fileName" ;
using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(hpubFile, System.IO.FileMode.OpenOrCreate, FileAccess.ReadWrite, file))
{
byte[] buffer = new byte[1024];
while (e.Result.Read(buffer, 0, buffer.Length) > 0)
{
stream.Write(buffer, 0, buffer.Length);
}
}
}
}
【问题讨论】:
-
你正在从你的服务器获取数据,你想保存在你的应用程序中,而且体积很大
-
尝试将WebClient的
AllowReadStreamBuffering属性设置为false,否则会在引发OpenReadCompleted事件之前下载整个文件 -
@Dragon 是的,我想将远程 url 中的 zip 保存到独立存储中,并且 zip 文件的大小不是一个修复程序。它可能从 10 Mb 到 500 MB 不等
-
@JMat @KooKiz 是对的,首先尝试使用您已有的代码:stackoverflow.com/questions/21572276/…,只需在您的 DownloadFIle 中添加
OpenReadComletedwc.AllowReadStreamBuffering = false;在我发布的答案中流是异步读取的,那么只有缓冲区量应该在内存中, -
@Romasz 我收到此异常 禁用缓冲时,主线程不支持读取。如果您愿意,我可以共享完整代码
标签: windows-phone-8 webclient isolatedstorage