Как загрузить файл GZIP из Интернета в Windows Phone 7 и распаковать содержимое - PullRequest
2 голосов
/ 18 апреля 2011

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

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

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

Ответы [ 4 ]

3 голосов
/ 19 апреля 2011

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

. Затем используйте следующий код:

<code>string data = "";
var stream = new GZipInputStream(response.GetResponseStream());
using (StreamReader reader = new StreamReader(stream)) {
    data = reader.ReadToEnd();
}
0 голосов
/ 22 октября 2011

Я разработал класс 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.

0 голосов
/ 20 апреля 2011

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

0 голосов
/ 18 апреля 2011

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

...