我无法使用 DownloadDataAsync 方法。目前唯一的选择是 DownloadStringAsync 方法。如何使用此方法下载 zip 文件。(我是 windows phone 8 应用程序开发的新手)
问问题
3920 次
3 回答
0
我只是想分享对我有用的解决方案。我向给定的 url 创建了一个 Web 请求,并将 gzip 文件下载到隔离的存储文件中。现在下载后我创建了一个目标文件流,并使用 GZipStream 的 WriteByte 方法将压缩的 gzip 流文件从源文件存储到目标文件。现在我们得到未压缩的文件。
注意:-GZipStream 可以从 NuGet 管理器添加到 Visual Studio。
这是我用来下载和提取 GZip 文件的代码片段。
公共异步任务 DownloadZipFile(Uri fileAdress, string fileName) { try {
WebRequest request = WebRequest.Create(fileAdress);
if (request != null)
{
WebResponse webResponse = await request.GetResponseAsync();
if (webResponse.ContentLength != 0)
{
using (Stream response = webResponse.GetResponseStream())
{
if (response.Length != 0)
{
using (IsolatedStorageFile isolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
if (isolatedStorage.FileExists(fileName))
isolatedStorage.DeleteFile(fileName);
using (IsolatedStorageFileStream file = isolatedStorage.CreateFile(fileName))
{
const int BUFFER_SIZE = 100 * 1024;
byte[] buf = new byte[BUFFER_SIZE];
int bytesread;
while ((bytesread = await response.ReadAsync(buf, 0, BUFFER_SIZE)) > 0)
{
file.Write(buf, 0, bytesread);
}
file.Close();
FileStream sourceFileStream = File.OpenRead(file.Name);
FileStream destFileStream = File.Create(AppResources.OpenZipFileName);
GZipStream decompressingStream = new GZipStream(sourceFileStream, CompressionMode.Decompress);
int byteRead;
while ((byteRead = decompressingStream.ReadByte()) != -1)
{
destFileStream.WriteByte((byte)byteRead);
}
decompressingStream.Close();
sourceFileStream.Close();
destFileStream.Close();
PhoneApplicationService.Current.State["DestinationFilePath"] = destFileStream.Name;
}
}
FileDownload = true;
}
}
}
}
if (FileDownload == true)
{
return DownloadStatus.Ok;
}
else
{
return DownloadStatus.Other;
}
}
catch (Exception exc)
{
return DownloadStatus.Other;
}
}
于 2014-04-21T05:11:30.920 回答
-1
要首先从 url 下载 zip 文件,需要将 zip 文件存储到独立的存储中,然后根据需要将其解压缩并读取文件。
于 2013-05-20T10:03:39.813 回答
-1
您必须使用 DownloadStrringAsync 方法吗?否则你可以检查这些:
如何提取从 HttpWebResponse 收到的压缩文件?
于 2013-03-01T15:37:38.933 回答