#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. В чем именно заключается ваш вопрос? Похоже, вы уже ответили на свой собственный вопрос, почему это не удается.