[英]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
無類型var參數需要使用數組數據體。
除了注意 - 你的for循環計數器從0到TotalGroups
,所以循環的TotalGroups + 1
是TotalGroups + 1
。 這是對的嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.