需求:
现需通过UDP上传bin文件:
有一bin文件2548K,现在我做了这样一个记录体,发给底层设备: 现在需要这样读取:1024K的发送,直到把整个bin文件发完为止,不足1024 的余数则赋值给block: TUpload= packed record
  Session:word;//包序号,一次1024K发,从0开始,每次加一
  data:array[1..1025] of byte;//1024K读取
  Block:Dword;//不足1024的余数  
  end;buttonclick:
var
Upload:TUpload;
i,j,m:integer;
begin
 for m:=0 to m do
 begin
  Upload.session:=m;//包序号
 end;
 filename:=opendialog1.FileName;
 path_edit.Text:=filename;
 for i:=length(fileName) downto 1 do
 if fileName[i]='\' then
   break;
 j:=1;
 while i<length(filename) do
 begin
   Upload.data[j]:=ord(filename[i+1]);
   i:=i+1;
   j:=j+1;
 end;//请问这里如何1024K,1024K读取,不足1024K的则赋值给 bolck;
UDP.sendbuffer(ip,port,upload,sizeof(Upload));
end;

解决方案 »

  1.   

    procedure TfrmMain.Button1Click(Sender: TObject);
    TUpload= record
       Session:word;//包序号,一次1024K发,从0开始,每次加一
       data:array[0..1023] of byte;//1024K读取
       Block:word;//不足1024的余数
      end;var f:THandle;
    Upload:TUpload;
    i,j,m:integer;
    begin
        f:=FileOpen(FileName,0);
        i:=0;
        repeat
            m:= FileRead(f,Upload.data,1024);
            if(m>0) then begin
                upload.Session:=i;
                Inc(i);
                Upload.Block:=1024-m;
                UDP.sendbuffer(ip,port,upload,sizeof(Upload));
            end;
        until m<1024;
        FileClose(f);
    end;