当前位置 : 主页 > 编程语言 > delphi >

是不是Delphi TFileStream WriteBuffer Int64的大小?我一次只能写少量

来源:互联网 收集:自由互联 发布时间:2021-06-23
我正在尝试编写更大的块来提高文件保存的速度.我有大约9个这些循环要转换,但我无法弄清楚我做错了什么 fs := TFileStream.Create(Myfile, fmCreate); 此代码有效: for RecordGroup := 0 to TotalGroups
我正在尝试编写更大的块来提高文件保存的速度.我有大约9个这些循环要转换,但我无法弄清楚我做错了什么

fs := TFileStream.Create(Myfile, fmCreate);

此代码有效:

for RecordGroup := 0 to TotalGroups - 1 do
begin
  for RecordNumber := 0 to Length(MyArray[RecordGroup]) - 1 do
  begin
    fs.WriteBuffer(MyArray[RecordGroup,RecordNumber],SizeOf(MyRecord));
  end;
end;

当我删除内部循环以编写更大的块时,代码不起作用:

for RecordGroup := 0 to TotalGroups - 1 do
begin
  fs.WriteBuffer(MyArray[RecordGroup],SizeOf(MyRecord) * Length(MyArray[RecordGroup]));
end;

我得到通用错误’Stream write error’

SizeOf(MyRecord)* Length(MyArray [RecordGroup])的值是180 * 152,004 = 27,360,720

我读过的所有内容基本上都说这是正确的.我有什么想法我做错了吗?

提前感谢您的任何想法.

将编写代码更改为(注意方括号中的附加0)

fs.WriteBuffer(MyArray[RecordGroup, 0],   SizeOf(MyRecord) * Length(MyArray[RecordGroup]));

错误是动态数组使用错误.我假设MyArray是二维数组,因此MyArray [RecordGroup]是1D动态数组 – 本质上是指向数据的指针 – 但WriteBuffer的无类型var参数需要使用数组数据体.

除了注意 – 你的for循环计数器从0到TotalGroups,所以循环的总数是TotalGroups 1.它是否正确?

网友评论