我使用Delphi Comport411f组件,我需要将二进制文件读取到流中,然后我需要在4096字节块中将流发送到Comport,并在写完每个块后从Comport读取。
我的问题是我的代码正在编写整个文件,然后才读取Comport的答案。在写完每个4096块之后,我需要读取Comport。
succ
答案 0 :(得分:0)
您的代码没有将整个文件写入Comport(除非文件恰好小于4096字节)。您正在读取文件,直到读取大小不是4096字节的块(即文件中的最后一个块),然后只发送一个块(并发送垃圾,因为实际读取的字节少于4096个字节)。你忽略了那块之前的一切。
您需要在每次迭代读取4096字节的循环内调用Comport.Write()
和Comport.ReadStr()
,例如:
var
buf: array[0..4095] of Byte;
OpenFile: File;
fc1, BytesRead: Integer;
begin
AssignFile(OpenFile, '2nd_loader.hex');
try
Reset(OpenFile, 1);
while not Eof(OpenFile) do
begin
fc1 := 0;
repeat
BlockRead(OpenFile, buf[fc1], sizeof(buf)-fc1, BytesRead);
Inc(fc1, BytesRead);
until (fc1 = sizeof(buf)) or Eof(OpenFile);
if fc1 = 0 then Break;
Comport1.Write(buf, fc1);
ComPort1.ReadStr(r, 20);
if GetQueueStatus(QS_ALLINPUT) <> 0 then
Application.ProcessMessages;
end;
finally
CloseFile(OpenFile);
end;
end;