文件操作问题,如何在文件尾部追新的文件片? Delphi / Windows SDK/APIhttp://www.delphi2007.net/DelphiNetwork/html/delphi_20061127111443244.html
我用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;
最好再加一句,删除临时文件