Delphi 从IdTCPClient1获取文件大小
我想获得文件大小,但收到文件后会丢失4个字节。因为正在发生的事情以及如何修复它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
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字节大小的文件?根据你的描述,我怀疑不是。实际使用的协议是什么?这是我心目中的不起作用的协议,你不能这样做。文件大小应单独发送:)