Я пришел к следующему выводу:
Распаковка архива .7z в папку не является функцией, предоставляемой C # LZMA SDK.
Боюсь, я не нашел каких-либо веских доказательств, как, например, сообщение в блоге, прямо заявляющее об этом.
Однако я нашел описание .7z
формата файла . Это описание не предоставило достаточно технических деталей для создания рабочего решения, но оно содержало некоторые факты о формате:
В этом разделе я объясню, как предыдущий пример хранится в структурированных данных [...]
Прежде всего, это заголовок, который содержит только две переменные: FileInfo и StreamsInfo.
FileInfo, вероятно, самая простая для понимания структура. Он содержит имя каждого файла в 7z и пару других флагов, определяющих, является ли файл каталогом или файл является пустым.
Насколько я вижу, эта структура не отражена в коде C # SDK. Это в сочетании с информацией о том, что методы Decoder.Code()
не работают с путем к каталогу или более чем одним выводом Stream
, является сильным показателем.
Таким образом, кажется, что часть C # LZMA SDK обрабатывает и дешифрует только один файл или «Сжатый поток», как он вызывается в связанном документе. Формат архива .7z
считается отдельным форматом, который в конечном итоге представляет собой структуру, содержащую произвольное количество сжатых потоков.
Эти потоки могут фактически быть объединены, опять же, произвольными способами; например архив может содержать файлы A и B, сжатые с помощью LZMA, затем добавить файл C к миксу и снова сжать его с помощью другого алгоритма. Это усложняет распаковку архива .7z
, что еще более жаль, что эта функция не предоставляется в SDK.