我需要从我的云端服务器下载zip(或gzip)文件到Windows Phone 7文件系统,然后解压缩zip中的文件夹内容。
通过我的搜索,我无法找到完整的解决方案。我使用HttpWebRequest获取二进制内容但不确定如何继续进行。本机BinaryReader不适用于Windows Phone,而Windows Phone 7的HttpWebRequest.Headers似乎没有用于指定编码类型的“Add”API。我也明白GZipStream不适用于Windows Phone 7。
以下是代码段:
private void btnReadUrl_Click(object sender, RoutedEventArgs e)
{
System.Uri targetUri = new System.Uri("http://cloud/images.gz");
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(targetUri);
request.BeginGetResponse(new AsyncCallback(ReadWebRequestCallback), request);
}
private void ReadWebRequestCallback(IAsyncResult callbackResult)
{
HttpWebRequest myRequest = (HttpWebRequest)callbackResult.AsyncState;
HttpWebResponse myResponse = (HttpWebResponse)myRequest.EndGetResponse(callbackResult);
using (StreamReader httpwebStreamReader = new StreamReader(myResponse.GetResponseStream()))
{
string results = httpwebStreamReader.ReadToEnd();
//TextBlockResults.Text = results; //-- on another thread!
Dispatcher.BeginInvoke(() => txtResult.Text = results);
}
}
我是c#的新手,我试图将我的应用程序从Android复制到Windows手机。
您能否指导我了解读取GZip内容所需的StreamReader,将其写入文件系统并将内容解压缩到文件夹。
答案 0 :(得分:3)
继大卫的回答。您可以从SharpZipLib获取NuGet。
然后使用如下代码。
string data = "";
var stream = new GZipInputStream(response.GetResponseStream());
using (StreamReader reader = new StreamReader(stream)) {
data = reader.ReadToEnd();
}
答案 1 :(得分:0)
您可能必须依赖第三方组件,例如SharpZipLib
答案 2 :(得分:0)
感谢您的回复。我正在寻找一个具有Apache许可证或类似功能的库,以便我可以在我的市场应用程序中使用。 我找到了这个库http://www.sharpgis.net/post/2010/08/25/REALLY-small-unzip-utility-for-Silverlight-e28093-Part-2.aspx,它运行良好。
答案 3 :(得分:0)
我为WP7开发了一个使用DotNetZip(http://dotnetzip.codeplex.com/)的HTTP类。
var request = new HttpGetRequest("http://www.server.com");
request.RequestGZIP = true; // default
Http.Get(request, (s, e) => MessageBox.Show(s) );
可以在这里下载:
https://mytoolkit.codeplex.com/
https://mytoolkit.svn.codeplex.com/svn/Network/
但Http
类需要GZIP类(在Libraries
目录中找到),因此最好下载整个源并将库用作DLL。