Delphi - 使用流将大型动态数组写入磁盘

时间:2017-07-04 23:17:12

标签: arrays delphi dynamic tstream

在Delphi程序中,我有一个包含4,000,000,001个红衣主教的动态数组。我试图写(后来读)它做了一个驱动器。我使用了以下内容:

const Billion = 1000000000;

stream := tFileStream.Create( 'f:\data\BigList.data', fmCreate);
stream.WriteBuffer( Pointer( BigArray)^, (4 * billion + 1) * SizeOf( cardinal));
stream.free;

它轰炸了:...引发异常类EWriteError,消息'流写错误'。

它写的文件大小只有3,042,089KB。

我做错了吗?可以一次写入的大小是否有限制(约3GB)?

1 个答案:

答案 0 :(得分:5)

Count的{​​{1}}参数是32位整数,因此您无法在该参数中传递所需的值。您需要通过多次单独调用WriteBuffer来编写文件,其中每个调用都会传递一个不超过此限制的计数。

我建议你写这样的东西。

WriteBuffer

另一个好处是您可以轻松显示进度。