在WinRT中显示Zip存档的内容

时间:2013-11-06 18:26:05

标签: c# windows-8 windows-runtime windows-store-apps

我想遍历压缩存档的内容,并且在内容可读的地方显示它们。我可以为基于文本的文件执行此操作,但似乎无法解决如何从图像等事物中提取二进制数据。这就是我所拥有的:

var zipArchive = new System.IO.Compression.ZipArchive(stream);

foreach (var entry in zipArchive.Entries)
{
    using (var entryStream = entry.Open())
    {
        if (IsFileBinary(entry.Name))
        {
            using (BinaryReader br = new BinaryReader(entryStream))
            {
                //var fileSize = await reader.LoadAsync((uint)entryStream.Length);
                var fileSize = br.BaseStream.Length;
                byte[] read = br.ReadBytes((int)fileSize);

                binaryContent = read;

我可以在zip文件中看到,但调用Length会导致OperationNotSupported错误。另外,考虑到我需要很长时间然后必须转换为整数,我觉得我错过了一些关于它应该如何工作的基本信息。

2 个答案:

答案 0 :(得分:0)

我认为流将在读取时解压缩数据,这意味着流不能知道解压缩的长度。调用entry.Length应返回可以使用的正确大小值。您也可以调用entry.CompressedLength来获取压缩大小。

答案 1 :(得分:0)

只需将流复制到文件或其他流中:

using (var fs = await file.OpenStreamForWriteAsync())
{
    using (var src = entry.Open())
    {
        var buffLen = 1024;
        var buff = new byte[buffLen];
        int read;
        while ((read = await src.ReadAsync(buff, 0, buffLen)) > 0)
        {
            await fs.WriteAsync(buff, 0, read);
            await fs.FlushAsync();
        }
    }
}