Как извлечь какие-либо архивы с SharpZipLib? - PullRequest
0 голосов
/ 03 декабря 2018

Я использую SharpZipLib для извлечения архивов.Мне удалось извлечь .zip архивы:

FastZip fastZip = new FastZip();

fastZip.ExtractZip(file, directory, null);

и извлечь .tar.gz:

// Use a 4K buffer. Any larger is a waste.    
byte[] dataBuffer = new byte[4096];

using (Stream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read))
{
    using (GZipInputStream gzipStream = new GZipInputStream(fileStream))
    {
        // Change this to your needs
        string fnOut = Path.Combine(directory, Path.GetFileNameWithoutExtension(file));

        using (FileStream fsOut = File.Create(fnOut))
        {
            StreamUtils.Copy(gzipStream, fsOut, dataBuffer);
        }
    }
}

Есть ли способ извлечь любой вид архива, где я не делаюнужно знать тип архива заранее?(например, SharpZipLib.ExtractAnyArchive(file, directory))

1 Ответ

0 голосов
/ 03 декабря 2018

SharpZipLib к сожалению, в настоящее время не удается автоматически определить формат файла архива / потока.

Вы должны либо реализовать эту функцию самостоятельно в какой-либо форме, либо искатьальтернативная библиотека, способная автоматически определять формат архива.Примером такой библиотеки может быть SharpCompress , однако, как вы уже отметили в комментариях, разные библиотеки могут иметь различные ограничения и ошибки, которые могут повлиять на функциональность вашего программного обеспечения.

Если вы решили применить свою собственную функцию автоопределения для SharpZipLib , вы можете выбрать различные подходы, например

  • Попробуйте открыть (неизвестный) архив с помощьюклассы архива (читателя / потока) для каждого формата архива, поддерживаемого SharpZipLib , до тех пор, пока вы не найдете тот, который может успешно открыть и обработать файл архива.

  • Реализовать некоторый форматпроцедура обнаружения, которая сканирует архивный файл / поток на наличие «магических» байтов подписи, идентифицирующих определенный формат архива.Если формат файла / потока архива был определен, выберите и используйте соответствующие классы SharpZipLib для обработки обнаруженного формата архива.

...