3

我有一个具有字节数组属性“ZipFile”的对象来存储文件流:

结果类中的属性:

public class Result
{
  public byte[] ZipFile;
}

在我的应用程序中,我生成了一个 PDF 文件,并使用我的 ReadFile 方法将文件读入“ZipFile”属性,如下所示:

objResult.ZipFile = ReadFile(FilePath);

ReadFile 方法的签名:

private byte[] ReadFile(string strFileName)

问题:

现在将循环调用我的 ReadFile 方法,因为我正在生成多个 PDF 文件。每次 ReadFile 方法都会从指定参数读取一个新文件到 'objResult.ZipFile' 属性,从而替换 'ZipFile' 属性中的旧值。现在,我希望我的“ZipFile”属性存储多个 PDF 文件流。那么我该怎么做呢?我应该将此属性更改为二维 byte[][] 数组,还是有更好的方法来做到这一点?请记住,该属性将用于通过调用方法保存(写入)这些文件。接受所有建议。谢谢。

4

4 回答 4

4

听起来你应该一个List<Result>,或者结果应该有一个集合,比如List<byte[]>一个ZipFiles属性。请注意,目前您根本没有属性 - 您有一个公共字段,这通常是一个坏主意。

(您可能不会其公开为List<byte[]>- 那将是底层实现。我可能会将其设为IEnumerable<byte[]>并公开一个AddZipFile方法。)

于 2012-07-06T07:43:56.193 回答
2

您可以使用List<byte[]>(list of byte array),然后在每次迭代中将该数组附加到列表中。就像是。

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

稍后您可以执行以下操作:

ResultObj.ZipFilesList.Add(ReadFile(FilePath));
于 2012-07-06T07:44:23.120 回答
1

如果您只想存储它们以供以后处理列表或队列,则可以这样做。我想我会选择队列,因为您的使用模式似乎与之匹配。

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

 // add file
 filesQueue.Enqueue(newFile);

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

如果您需要并行化等,您可以稍后切换到并发队列。

于 2012-07-06T07:49:26.540 回答
1

你需要有清单List<byte[]>

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

并将文件添加到您的列表中

objResult.ZipFiles.Add(ReadFile(FilePath));
于 2012-07-06T07:45:37.317 回答