Delphi TFileStream WriteBuffer Int64 的大小不是吗?我一次只能写少量
Isn't the size of Delphi TFileStream WriteBuffer Int64? I'm only able to write small amounts at a time
我正在尝试编写更大的块以提高文件保存速度。我有大约 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]
是一维动态数组——本质上是指向数据的指针——但是 WriteBuffer
的无类型可变参数需要使用数组数据体。
旁注 - 您的 for 循环计数器从 0 变为 TotalGroups
,因此循环总数为 TotalGroups + 1
。正确吗?
我正在尝试编写更大的块以提高文件保存速度。我有大约 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]
是一维动态数组——本质上是指向数据的指针——但是 WriteBuffer
的无类型可变参数需要使用数组数据体。
旁注 - 您的 for 循环计数器从 0 变为 TotalGroups
,因此循环总数为 TotalGroups + 1
。正确吗?