关于串口发送大文件的方法的疑问,各位请指教,谢谢(100分)

  • 主题发起人 主题发起人 aikede
  • 开始时间 开始时间
A

aikede

Unregistered / Unconfirmed
GUEST, unregistred user!
比如我通过串口要发送一个大文件如,1G的,我要怎么样做呢?
很显然无法完整读到内存流中,再发送?
那要怎么样才可以做到? 文件流吗??
文件流应该不是一次性载入的,请教高手??
 
一段一段发发吧,比如说分割成1M,文件也可以一段一段载入.
不过串口速度比较慢,需要点耐心,1G / 128000 / 8 = 67109 秒 将近两个小时
 
贊成樓上分段發送
 
我也想是分段发送,可是用什么方法分呢?
是用文件流分段发送吗?
还有接收的时候,怎么将这些段连成整体,
内存流似乎不可行???????
 
对了,我用文件流这样分段可以发送大文件吗?
小的试过了,
var
MyFileStream:TFileStream;
//MyWriteStream:TMemoryStream;
TotalSize,ThisSize,LeftSize,SendSize:int64;
Mybuffer:array[0..1023]of byte;
PackCount:integer;
begin
if not OpenDialog1.Execute then
Exit;
MyFileStream:=TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
//MyWriteStream:=TFileStream.Create;//内存流
//MyFileStream.Position:=0;//开头地方
MyFileStream.Seek(0,soFrombegin
ning);
TotalSize:=MyFileStream.Size;
SendSize:=0;
PackCount:=0;
while SendSize<totalSizedo
begin
if SendSize+1024<=TotalSize then
ThisSize:=1024
else
ThisSize:=TotalSize-sendSize;
MyFileStream.ReadBuffer(MyBuffer,ThisSize);
SysCtrlClass.SendData(Mybuffer,ThisSize);
SendSize:=SendSize+ThisSize;
Sleep(20);
Inc(PackCount);
end;
ShowMessage('total packs:'+IntToStr(PackCount));
end;
 
流对于串口只是一个概念,因为最终驱动只会一个字节一个字节的发送到COM口!
 
后退
顶部