Как загрузить файл GZIP из Интернета в Windows Phone 7 и разархивировать содержимое

#windows-phone-7 #httpwebrequest #gzip

#windows-phone-7 #httpwebrequest #gzip

Вопрос:

У меня есть требование загрузить zip (или gzip) файл с моего облачного сервера в файловую систему Windows phone 7 и разархивировать содержимое папки в zip.

С помощью проведенного мной поиска я не смог найти полного решения для этого. Я использовал HttpWebRequest для получения двоичного содержимого, но не уверен, как действовать дальше. Собственный двоичный файл для чтения недоступен для Windows Phone и HttpWebRequest.В заголовках для Windows Phone 7, похоже, нет 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 Phone.

Не могли бы вы подсказать мне, какой StreamReader требуется для чтения содержимого GZip, записи его в файловую систему и распаковки содержимого в папки.

Ответ №1:

В дополнение к ответу Дэвида. Вы можете получить SharpZipLib из NuGet.

Затем используйте код, подобный следующему.

 string data = "";
var stream = new GZipInputStream(response.GetResponseStream());
using (StreamReader reader = new StreamReader(stream)) {
    data = reader.ReadToEnd();
}  

Ответ №2:

Возможно, вам придется полагаться на сторонний компонент, такой как SharpZipLib

Ответ №3:

Спасибо за ответы. Я искал библиотеку с лицензией Apache или аналогичную, чтобы я мог использовать ее в своем приложении Market. Я нашел эту библиотеку http://www.sharpgis.net/post/2010/08/25/REALLY-small-unzip-utility-for-Silverlight-e28093-Part-2.aspx и это сработало нормально.

Комментарии:

1. @tempy — Лицензия SharpZipLib на самом деле является GNU с исключением , которое разрешает включение в коммерческое приложение, если используется двоичный файл (в отличие от исходного кода).

Ответ №4:

Я разработал HTTP-класс для WP7, который использует DotNetZip (http://dotnetzip.codeplex.com / ).

 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.