Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1260578
  • 博文数量: 788
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 7005
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-19 15:52
文章存档

2017年(81)

2011年(1)

2009年(369)

2008年(337)

分类:

2009-03-02 11:35:52



我用indy分片断点传文件,客户端每次发送32K,但是在服务器端接收之后,每次写入都将原来的覆盖了,如何解决?望高手不吝赐教!  
   
  服务器端处理源码:  
      If   sCommand='StreamContent'   Then  
      Begin  
          //接收文件大小  
          sCommand:=AThread.Connection.ReadLn();  
          TotalSize:=StrToInt(sCommand);  
   
          //当前大小  
          fs:=TFileStream.Create('TestReceive.exe',fmOpenRead);  
          NowSize:=fs.Size;  
          fs.Free;  
          lbRecord.Items.Add(IntToStr(NowSize)   +   '/'   +   sCommand);  
   
          //接收流  
          fs:=TFileStream.Create('TestReceive.exe',fmOpenReadWrite);  
          AThread.Connection.ReadStream(fs,Min(TotalSize-NowSize,AThread.Connection.RecvBufferSize),False);  
  //*******问题就出在上面这行,我换过打开方式为fmCreate,也不行******  
          fs.Free;  
   
          //发送当前字节大小,如果已经完成,则发送FILEEND  
          fs:=TFileStream.Create('TestReceive.exe',fmOpenRead);  
          NowSize:=fs.Size;  
          If   NowSize>=TotalSize   Then   AThread.Connection.WriteLn('FILEEND')   Else  
          Begin  
              AThread.Connection.WriteLn(IntToStr(NowSize));  
          end;  
          fs.Free;  
   
          //发送提示继续  
          AThread.Connection.WriteLn('GOON');  
      end;  
   
   
  同问题发送在DELPHI的VCL版,up者1分,解决者最少50分。  
 

//解决者最少50分。  
  哇,利益驱动老冯,给你一段代码。

冯老前辈,我在等你的代码哦。如果你一下子就解决,就是100分哦,再在另一个帖子回复一下,就是200分哦。

靠   快无语了   抢分达人啊   老冯~~

不抢了。

没有人来,我就来。哼哼哈哈。  
   
  var  
      CurrentFile:   TFileStream   ;  
      NextFile:   TFileStream;  
      UpdateFile:   File;  
  begin  
      //建立一个临时文件  
      if   FileExists('NextTestReceive.exe')   then  
      begin  
          AssignFile(UpdateFile,'NextTestReceive.exe');  
          Rewrite(UpdateFile,1);  
          CloseFile(UpdateFile);  
      end;  
   
      CurrentFile   :=   TFileStream.Create('TestReceive.exe',fmOpenwrite);  
      CurrentFile.Seek(0,soFromEnd);  
   
      NextFile   :=   TFileStream.Create('NextTestReceive.exe',fmOpenRead);  
      AThread.Connection.ReadStream(NextFile,   -1,   True);//读  
      NextFile.Seek(0,   soFromBeginning);  
   
      CurrentFile.CopyFrom(NextFile,   NextFile.Size);   //追尾  
   
      CurrentFile.Free;  
      NextFile.Free;  
  end;

最好再加一句,删除临时文件



--------------------------
新闻:上海最快3月底推TD上网本
导航:博客园首页  知识库  新闻  招聘  社区  小组  博问  网摘  找找看
阅读(370) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~