распаковать ZIP-файл в Windows 8 C#

Я создаю приложение в стиле метро для Windows 8, и у меня есть zip-файл, который я загружаю из веб-службы, и я хочу его извлечь.

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

Вот что у меня есть:

var appData = ApplicationData.Current;
var file = await appData.LocalFolder.GetItemAsync("thezip.zip") as StorageFile;
var decompressedFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("tempFileName", CreationCollisionOption.GenerateUniqueName);
using (var decompressor = new Decompressor(await file.OpenSequentialReadAsync()))
using (var decompressedOutput = await decompressedFile.OpenAsync(FileAccessMode.ReadWrite))
{
    var bytesDecompressed = await RandomAccessStream.CopyAsync(decompressor, decompressedOutput);
}

Но это нехорошо, переменная bytesDecompressedвсегда нулевого размера, а zip-файл весит 1,2 МБ

. Любая помощь здесь будет принята с благодарностью.

РЕДАКТИРОВАТЬ :Ответ, благодаряMahantesh

Вот код для распаковки файла:

private async void UnZipFile()
{
    var folder = ApplicationData.Current.LocalFolder;

    using (var zipStream = await folder.OpenStreamForReadAsync("thezip.zip"))
    {
        using (MemoryStream zipMemoryStream = new MemoryStream((int)zipStream.Length))
        {
            await zipStream.CopyToAsync(zipMemoryStream);

            using (var archive = new ZipArchive(zipMemoryStream, ZipArchiveMode.Read))
            {
                foreach (ZipArchiveEntry entry in archive.Entries)
                {
                    if (entry.Name != "")
                    {
                        using (Stream fileData = entry.Open())
                        {
                            StorageFile outputFile = await folder.CreateFileAsync(entry.Name, CreationCollisionOption.ReplaceExisting);
                            using (Stream outputFileStream = await outputFile.OpenStreamForWriteAsync())
                            {
                                await fileData.CopyToAsync(outputFileStream);
                                await outputFileStream.FlushAsync();
                            }
                        }
                    }
                }
            }
        }
    }
}
14
задан Rob 5 April 2013 в 14:29
поделиться