簡體   English   中英

是不是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無類型var參數需要使用數組數據體。


除了注意 - 你的for循環計數器從0到TotalGroups ,所以循環的TotalGroups + 1TotalGroups + 1 這是對的嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM