2013-11-01 46 views
0

我正在使用DotNetZip將多個MemoryStreams添加到單個存檔。到目前爲止,我的代碼在我選擇1或2個文件時起作用,但如果我添加更多,則不起作用。我發現不同的是CRC32對於那些不好的檔案都是00000000。這是關於檔案大小的東西嗎?任何幫助表示讚賞! 我在C#中的代碼:DotNetZip如​​何修復0000000 CRC32問題?

foreach(.....){ 
     var zipEntryName=.....//Get the file name in string; 
     var UDocument = .....//Get a object 
     var UStream = UDocument .GetStream(); 
     UStream.Seek(0, SeekOrigin.Begin); 
     ZipEntry entry = zipFile.AddEntry(zipEntryName,UStream); 
} 
var outputStream = new MemoryStream(); 
      outputStream.Seek(0, SeekOrigin.Begin); 
      zipFile.Save(outputStream); 
      outputStream.Flush(); 
      return outputStream; 
+0

你會得到什麼錯誤? – JMK

+0

沒有錯誤來生成zip文件,但是當你打開它時,會發生錯誤。 –

+0

實際上,當您解壓縮zip文件時,它表示存檔文件格式未知或已損壞。但是,如果foreach循環中只有2個或1個項目,則不會有任何問題。 –

回答

0

我認爲它有內存泄漏。 您正在foreach循環中創建對象,如果循環迭代次數更多,則會出現問題。

這裏的問題就在你的代碼:

var UDocument = .....//Get a object 

單身是可以被實例化一次,並且只有一次的類。 使用單身人員類如下:

public static SingletonSample InstanceCreation() 
{ 
    private static object lockingObject = new object(); 
    if(singletonObject == null) 
    { 
     lock (lockingObject) 
     { 
      singletonObject = new SingletonSample(); 

     } 
    } 
    return singletonObject; 
} 
+0

第一句話看起來不錯,但我不認爲單身是合適的解決方案。 –

+0

@Be:謝謝,請你告訴我這個聲明 - > var UDocument = ..... //獲取對象 –

+0

不,因爲它不是我的問題,也不是我的代碼。我只是沒有看到在這裏使用單身人士的任何理由。 –