0

圧縮されたアーカイブの内容を繰り返し処理し、内容が読み取り可能な場合は表示したいと考えています。テキストベースのファイルに対してこれを行うことができますが、画像などからバイナリデータを引き出す方法がわかりません。ここに私が持っているものがあります:

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ます。また、私が long を取得してから整数にキャストする必要があることを考えると、これがどのように機能するかについて非常に基本的なことが欠けているように感じます。

4

2 に答える 2

0

ストリームはデータを読み取るときに圧縮解除すると思います。つまり、ストリームは圧縮解除された長さを知ることができません。entry.Length を呼び出すと、使用できる正しいサイズ値が返されるはずです。entry.CompressedLength を呼び出して圧縮サイズを取得することもできます。

于 2013-11-06T19:32:03.810 に答える