Почему я получил исключение ошибки данных в 7-zip SDK? распаковка winrar 5

#c# #sdk #7zip #rar #winrar

Вопрос:

Я прикрепил специальный архив winrar, который выдаст мне ошибку sdk. Пожалуйста, вы можете мне помочь?

архив для моделирования ошибок и тестирования

пример вызова:

  MemoryStream inputMemoryStream = new MemoryStream();
 string archiveFilePath = @"c:winrar.rar";
 File.OpenRead(archiveFilePath).CopyTo(inputMemoryStream);
 var bb = ExtractBytes(inputMemoryStream.ToArray());



private byte[] ExtractBytes(byte[] data)
{
        using (var inStream = new MemoryStream(data))
        {
            var decoder = new SevenZip.Compression.LZMA.Decoder();
            inStream.Seek(0, 0);
            using (var outStream = new MemoryStream())
            {
                long outSize;
                decoder.SetDecoderProperties(GetLzmaProperties(inStream, out outSize));
                decoder.Code(inStream, outStream, inStream.Length - inStream.Position, outSize, null);
                return outStream.ToArray();
            }
        }
 }
    
     private byte[] GetLzmaProperties(Stream inStream, out long outSize)
    {
        var lzmAproperties = new byte[5];
        if (inStream.Read(lzmAproperties, 0, 5) != 5)
        {
            throw new Exception("LzmaException");
        }
        outSize = 0;
        for (int i = 0; i < 8; i  )
        {
            int b = inStream.ReadByte();
            if (b < 0)
            {
                throw new Exception("LzmaException");
            }
            outSize |= ((long)(byte)b) << (i << 3);
        }
        return lzmAproperties;
    }
 

Исключение происходит, когда функция кода вызова:

 decoder.Code(inStream, outStream, inStream.Length - inStream.Position, outSize, null);
            
 

https://www.7-zip.org/sdk.html
вер.19.00

сведения об отладке исключений введите описание изображения здесь

желаемое поведение: 7zip поддерживает winrar, тогда что я делаю не так в своем коде?

информация о формате архива: https://superuser.com/questions/770370/what-is-the-difference-between-rar-and-rar5-compression

Ответ №1:

LZMA SDK нельзя использовать для извлечения архивов RAR:

  • RAR не использует LZMA в качестве алгоритма сжатия, и RAR не поддерживается LZMA SDK
  • 7-Zip и LZMA SDK-это не одно и то же
  • 7-Zip использует код unrar от RARLAB, который является собственностью

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

1. В чем именно заключается ваш вопрос? Похоже, вы уже ответили на свой собственный вопрос, почему это не удается.