Открытие System.IO.Packaging.Package из потока без возможности поиска

Я пытаюсь распаковать System.IO.Packaging.Package что я получил от веб-сервера. То есть я использую System.IO.Packaging.Package.Open(Stream) метод и передавая ему ответный поток System.Net.HttpWebResponse, К сожалению, это поднимает System.ArgumentException говорит мне, что это

Невозможно работать с потоком [a], который не поддерживает поиск.

Глядя на справочный источник, выясняется, что System.IO.Packaging.Package использования System.IO.Packaging.ZipPackage как его единственная реализация, которая в свою очередь использует внутренний ZipArchive учебный класс. И конечно же, ValidateModeAccessStreamStreamingCombinations() метод вызывает это исключение в строке 588, если stream.CanSeek является false что касается потока ответа от моего HttpWebResponse,

Тем не менее, есть волшебство streaming параметр, который, по-видимому, всегда false и передается от Package.Open() метод вплоть до ValidateModeAccessStreamStreamingCombinations(),

Итак, вот мой вопрос: есть ли способ использовать Package.Open(Stream) построить Package на лету из неприбыльного потока? Или я должен где-то кэшировать содержимое потока, например, в MemoryStream? (Я действительно не хочу этого делать, потому что я не заинтересован в потоке пакетов, как только распаковал его.)

1 ответ

Решение

Да ладно. streaming Параметр предназначен только для записи System.IO.Packaging.Package на лету. Начиная со строки 954, существует множество методов "API streaimg времени записи". Там также есть ThrowIfInStreamingCreation() метод, который вызывает исключение, только когда я пытаюсь написать пакет.

Так что да, я должен кешировать поток без возможности поиска из HttpWebResponse в MemoryStream или временный файл. Никакая распаковка на лету для меня:(

Другие вопросы по тегам