读取字节数组多个文件
我有了一个字节数组属性“的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
方法。)
您可以使用List<byte[]>
(名单的字节数组),然后在每次迭代中追加列表中的数组。就像是。
public class Result
{
public List<byte[]> ZipFilesList { get; set; };
}
之后你可以这样做:
ResultObj.ZipFilesList.Add(ReadFile(FilePath));
谢谢。我会做这个,让你知道。 – 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 ..
谢谢您的回答。我将返回一个Result对象给调用方法,从它的属性读取流。那么,为什么我应该公开一个AddZipFile方法? – 2012-07-06 07:53:16
@ ebad86:Well * something *必须将字节数组添加到列表中 - 但将整个列表作为属性公开通常是个坏主意。 – 2012-07-06 08:13:35
感谢您的信息。我犯这个错误很多。虽然,我很des to学习为什么这是一个坏主意。您的任何文章或书籍中是否提及此主题?你能指导我在哪里可以了解更多关于此? – 2012-07-06 08:22:01