Delphi 从IdTCPClient1获取文件大小

Delphi 从IdTCPClient1获取文件大小,delphi,file-handling,delphi-xe7,Delphi,File Handling,Delphi Xe7,我想获得文件大小,但收到文件后会丢失4个字节。因为正在发生的事情以及如何修复它 procedure TForm1.IdTCPClient1Connected(Sender: TObject); var FS: TFileStream; FPath, FName: String; begin FPath := ExtractFilePath(Application.ExeName) + 'Downloads'; FName := IdTCPClient1.IOHandler.Rea

我想获得文件大小,但收到文件后会丢失4个字节。因为正在发生的事情以及如何修复它

procedure TForm1.IdTCPClient1Connected(Sender: TObject);
var
  FS: TFileStream;
  FPath, FName: String;
begin
  FPath := ExtractFilePath(Application.ExeName) + 'Downloads';
  FName := IdTCPClient1.IOHandler.ReadLn;

  if not DirectoryExists(FPath) then ForceDirectories(FPath);

  FS := TFileStream.Create(FPath + '\' + ExtractFileName(FName), fmCreate);
  try
    CProgressBar.Max := IdTCPClient1.IOHandler.ReadLongInt(); // Proble here. Without thats ok
    IdTCPClient1.IOHandler.ReadStream(FS, -1, True);
  finally
    FreeAndNil(FS);
  end;

  IdTCPClient1.Disconnect;

  CLabel.Caption := 'File received';
end;

文件大小应单独发送

是否丢失了元数据?收到文件后,它是否仍然工作或包含所有数据?如果不知道文件数据是如何发送的,则无法回答此问题。您正在读取前4个字节,并将其解释为文件大小。您告诉
ReadStream()
无论大小,都要一直读取,直到断开连接。服务器是否在发送实际文件之前发送4字节大小的文件?根据你的描述,我怀疑不是。实际使用的协议是什么?这是我心目中的不起作用的协议,你不能这样做。文件大小应单独发送:)