我正在尝试编写更大的块来提高文件保存的速度.我有大约9个这些循环要转换,但我无法弄清楚我做错了什么 fs := TFileStream.Create(Myfile, fmCreate); 此代码有效: for RecordGroup := 0 to TotalGroups
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.它是否正确?