Открытие 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
или временный файл. Никакая распаковка на лету для меня:(