读取字节数组多个文件

问题描述:

我有了一个字节数组属性“的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 [] []数组,还是有更好的方法来做到这一点?请记住,此属性将用于通过调用方法保存(写入)这些文件。向所有建议开放。谢谢。

听起来像是你应该要么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

您可以使用List<byte[]>(名单的字节数组),然后在每次迭代中追加列表中的数组。就像是。

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

之后你可以这样做:

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

谢谢。我会做这个,让你知道。 – 2012-07-06 07:55:41

你需要有List<byte[]>

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

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

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

如果你只是想要存储它们为了以后处理列表或队列将做到这一点。我想我会选择一个队列,因为您的使用模式似乎与此相匹配。

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

// add file 
filesQueue.Enqueue(newFile); 

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

,如果你会需要并行等以后,您可以切换到concurrentQueue ..