2012-07-06 185 views
3

我有了一個字節數組屬性「的ZipFile」來存儲文件流的對象:讀取字節數組多個文件

屬性,結果類:

public class Result 
{ 
    public byte[] ZipFile; 
} 

在我的應用程序我生成一個PDF文件,並使用我的方法ReadFile的這樣的文件讀入到了「ZipFile中的」屬性:

objResult.ZipFile = ReadFile(FilePath); 

小號ReadFile的方法ignature:

private byte[] ReadFile(string strFileName) 

問題:

我ReadFile的方法現在被稱爲一個循環中,因爲我生成多個PDF文件。每次ReadFile方法將從指定的參數中讀取一個新文件到'objResult.ZipFile'屬性,從而替換'ZipFile'屬性中的舊值。現在,我想讓我的'ZipFile'屬性存儲多個PDF文件流。那我該怎麼做呢?我應該只是將此屬性更改爲二維byte [] []數組,還是有更好的方法來做到這一點?請記住,此屬性將用於通過調用方法保存(寫入)這些文件。向所有建議開放。謝謝。

回答

4

聽起來像是你應該要麼List<Result>,或結果爲一個集合,如List<byte[]>ZipFiles財產。請注意,目前你根本沒有財產 - 你有一個公共領域,這通常是一個壞主意。

(你可能不會暴露它作爲一個List<byte[]> - 這將是底層實現我可能會使其成爲IEnumerable<byte[]>和暴露的AddZipFile方法。)

+0

謝謝您的回答。我將返回一個Result對象給調用方法,從它的屬性讀取流。那麼,爲什麼我應該公開一個AddZipFile方法? – 2012-07-06 07:53:16

+0

@ ebad86:Well * something *必須將字節數組添加到列表中 - 但將整個列表作爲屬性公開通常是個壞主意。 – 2012-07-06 08:13:35

+0

感謝您的信息。我犯這個錯誤很多。雖然,我很des to學習爲什麼這是一個壞主意。您的任何文章或書籍中是否提及此主題?你能指導我在哪裏可以瞭解更多關於此? – 2012-07-06 08:22:01

2

您可以使用List<byte[]>(名單的字節數組),然後在每次迭代中追加列表中的數組。就像是。

public class Result 
{ 
    public List<byte[]> ZipFilesList { get; set; }; 
} 

之後你可以這樣做:

ResultObj.ZipFilesList.Add(ReadFile(FilePath)); 
+0

謝謝。我會做這個,讓你知道。 – 2012-07-06 07:55:41

1

你需要有List<byte[]>

public class Result 
{ 
    public List<byte[]> ZipFiles; 
} 

列表和文件添加到您的列表

objResult.ZipFiles.Add(ReadFile(FilePath)); 
1

如果你只是想要存儲它們爲了以後處理列表或隊列將做到這一點。我想我會選擇一個隊列,因爲您的使用模式似乎與此相匹配。

// make queue 
var filesQueue = new Queue<byte[]>(); 

// add file 
filesQueue.Enqueue(newFile); 

// get file 
var fileToSave=filesQueue.Dequeue(); 

,如果你會需要並行等以後,您可以切換到concurrentQueue ..