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

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

概述我正在尝试编写更大的块来提高文件保存的速度.我有大约9个这些循环要转换,但我无法弄清楚我做错了什么 fs := TFileStream.Create(Myfile, fmCreate); 此代码有效: for RecordGroup := 0 to TotalGroups - 1 dobegin for RecordNumber := 0 to Length(MyArray[RecordGr 我正在尝试编写更大的块来提高文件保存的速度.我有大约9个这些循环要转换,但我无法弄清楚我做错了什么

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

此代码有效:

for RecordGroup := 0 to TotalGroups - 1 dobegin  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 dobegin  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.它是否正确?

总结

以上是内存溢出为你收集整理的是不是Delphi TFileStream WriteBuffer Int64的大小?我一次只能写少量全部内容,希望文章能够帮你解决是不是Delphi TFileStream WriteBuffer Int64的大小?我一次只能写少量所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1216446.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存