你应该在内存中开一块区域,用来保存接受到的数据,然后待该区域满时,一次性写入文件,如果数据来一次写一次的话,硬盘早就坏了!CreateFile
SeekFile
WriteFile

解决方案 »

  1.   

    传大数据量进行分包传输,我这里有一个udp的程序,你可以借鉴一下
    首先在DELPHI编译环境中,创建一工程。在FORM1的界面上添加两个TMemo控件(Memo1,Memo2);三个TBitBtn控件(BitBtn1, BitBtn2, BitBtn3),其Caption分别为“Import”、“Send”、“Close”;一个文件打开对话框OpenDialog1,其Filter属性为“文本文件(*.txt)|*.txt”;一个TNMUDP控件NMUDP1。NMUDP1的属性设置如下所示: 
    LocalPort:6666 
    RemoteHost:127.0.0.1 
    RemotePort:6666 
    ReportLevel:1 
    最后的界面如图1所示: 
     
     
    图1
     
    双击BitBtn1,添加如下代码: 
    procedure TForm1.BitBtn1Click(Sender: TObject); 
    begin 
    memo1.Lines.Clear; 
    if opendialog1.Execute then 
    memo1.Lines.LoadFromFile(opendialog1.FileName); 
    end; 
    双击BitBtn2,添加如下代码: 
    procedure TForm1.BitBtn2Click(Sender: TObject); 
    var 
    strm:tmemorystream; 
    i,count:integer; 
    strl,str:string; 
    buf:array[1..2048] of char; 
    begin 
    strm:=tmemorystream.Create; 
    strl:=memo1.Lines.Text; 
    if length(strl)<=2048 then begin 
    strm.Write(strl[1],length(strl)); 
    nmudp1.SendStream(strm); 
    end 
    else begin 
    count:=trunc(length(memo1.Lines.text)/2048); 
    for i:=0 to count do begin 
    str:=copy(memo1.Lines.Text,i*2048+1,2048); 
    strm.Position:=0; 
    strm.SetSize(length(str)); 
    strm.Write(str[1],length(str)); 
    nmudp1.SendStream(strm); 
    end 
    end; 
    strm.Free; 
    end; 
    BitBtn3的作用是关闭整个窗口,其代码略。 
    为控件NMUDP1的OnDataReceived事件中添加如下代码,其作用是当利用控件接收数据,并显示在Memo2中: 
    procedure TForm1.NMUDP1DataReceived(Sender: TComponent; 
    NumberBytes: Integer; FromIP: String; Port: Integer); 
    var 
    buf:array [1..2048] of char; 
    ToF: file; 
    strm:tmemorystream; 
    begin 
    strm:=tmemorystream.Create; 
    strm.Clear; 
    nmudp1.ReadStream(strm); 
    strm.Read(buf,sizeof(buf)); 
    memo2.Lines.Add(buf); 
    strm.Free; 
    end; 
    程序运行时,首先点击按钮Import导入数据。点击按钮Send通过控件NMUDP1发送数据。当控件NMUDP1接收到数据时,自动将数据存放在Memo2中,其结果如图2所示: