2017-02-28 58 views
-1

早上好,MemoryStream不會更新C#

我需要你的幫助。

1.)我在我的應用程序中創建ZipArchive從我從數據庫中獲得的二進制數組對象。

2.)在這些ZipArchive對象中,我應該刪除某些文件。

3)現在,我必須讓這些ZipArchive對象轉化成一個MemoryStream或者作爲一個byte []

這是代碼我使用:

foreach (var zip in fileList.Reverse()) 
     { 
      using (var memStream = new MemoryStream(zip.Content, true)) 
      { 
       var zipFile = new ZipArchive(memStream, ZipArchiveMode.Update); 

       foreach (var zipArchiveEntry in zipFile.Entries.Reverse()) 
       { 
        if (IsNecessary(zipArchiveEntry.Name) == false) 
        { 
         zipArchiveEntry.Delete(); 
        } 
       } 

       zip.Content = zipFile.Entries.Count > 0 ? memStream.ToArray() : null; 
      } 

      if (zip.Content == null) 
      { 
       fileList.Remove(zip); 
      } 
     } 
     return fileList; 

目前這一行:

zip.Content = zipFile.Entries.Count > 0 ? memStream.ToArray() : null; 

給我未清洗的MemoryStream回來,但我需要新的。

你們有沒有一些tipps或者可能是我的解決方案,我怎麼可以處理這與.NET?我已經搜索了一段時間,但它接縫,只是想在另一個方向做。

PS:刪除工作正常。

對不起,英文不好,並提前感謝您的幫助。 :-)

+1

您的代碼看起來幾乎正確。您應該確保在使用memStream.ToArray()方法之前關閉最初的'zipFile'對象。否則,歸檔對象將不會更新流。只要給'zipFile'一個'using'語句,並將問題行保留在'using'塊之外。如果你需要更多的幫助,你需要解決你的問題,所以它包含一個很好的[mcve],清楚地表明你想要做什麼以及確切的問題是什麼。 –

+0

(我發現你在'MemoryStream'上使用'using'語句很諷刺,它沒有用處,並且'zipFile'上沒有'using'語句,這對你來說很重要。) –

+0

謝謝彼得,多數民衆贊成在這裏幫助。我不知道,zipFile在更新之前必須「關閉」。 – Malloc

回答

1

您的代碼看起來幾乎正確。您應該確保在使用memStream.ToArray()方法之前關閉原始zipFile對象。否則,歸檔對象將不會更新流。只需給zipFile一個使用語句,並將問題行保留在使用block之外。

這是答案,做了這項工作。