gpt4 book ai didi

delphi - Delphi TFileStream WriteBuffer的大小不是Int64吗?我一次只能写少量内容

转载 作者:行者123 更新时间:2023-12-03 15:47:31 26 4
gpt4 key购买 nike

我正在尝试写入更大的 block 以提高文件保存的速度。我大约有 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;

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

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

我收到一般错误“流写入错误”

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] 是一维动态数组 - 本质上是指向数据的指针 - 但 WriteBuffer< 的无类型变量参数 需要使用数组数据体。

<小时/>

旁注 - 您的 for 循环计数器从 0 到 TotalGroups,因此循环总数为 TotalGroups + 1。正确吗?

关于delphi - Delphi TFileStream WriteBuffer的大小不是Int64吗?我一次只能写少量内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54877805/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com