2015-04-30 12 views
1

我試圖解開從網絡服務器收到的System.IO.Packaging.Package。也就是說,我正在使用System.IO.Packaging.Package.Open(Stream)方法並將其傳遞給System.Net.HttpWebResponse的響應流。不幸的是,這引起了System.ArgumentException告訴我它從不可查找的流中打開System.IO.Packaging.Package

無法對不支持查找[A]流進行操作。

綜觀參考源事實證明,System.IO.Packaging.Package使用System.IO.Packaging.ZipPackage作爲其唯一的這反過來使用內部ZipArchive類實現。當然,如果stream.CanSeekfalse(這是來自我的HttpWebResponse的響應流的情況),則ValidateModeAccessStreamStreamingCombinations()方法在行588中引發此異常。

然而,有一種神奇的streaming參數,該參數很明顯,總是false,並得到來自Package.Open()方法傳來傳去一路下跌到ValidateModeAccessStreamStreamingCombinations()

所以這裏是我的問題:有沒有什麼辦法可以使用Package.Open(Stream)構建一個Package從不可查找的流中實時運行?或者我必須在某處緩存流內容,例如在MemoryStream? (我真的不想這樣做,因爲我一旦解開它就對包流不感興趣。)

回答

0

呵呵,沒關係。 streaming參數僅用於寫入 a System.IO.Packaging.Package即時。從line 954開始,有一堆「寫入時間streaimg API」方法。還有一個ThrowIfInStreamingCreation()方法,當我嘗試編寫一個包時它只會引發異常。

所以是的,我必須緩存HttpWebResponse中的非尋找流MemoryStream或臨時文件。沒有即時解包給我:(