-------送分!-------如果搬移文件中的数据块?--------- ( 积分: 200 )

  • 主题发起人 主题发起人 lovecathy
  • 开始时间 开始时间
L

lovecathy

Unregistered / Unconfirmed
GUEST, unregistred user!
函数接口:
function MoveData(const fn: string; SrcPos, DstPos, DataLen: Int64): Boolean;
C:/A.bat如有数据:
AAA-BBB-CCC-DDD-EEE-FFF
现有参数:
MoveData('C:/A.bat', 4, 12, 3)
得到下面的结果:
AAA-CCC-DDD-BBB-EEE-FFF

!!!要求:
1 不能用中间文件
2 数据块较大时应分段读取(如BufferSize设置为 1MB)。
 
使用Stream,ReadStream、WriteStream
 
function MoveData(fn: string; SrcPos, DstPos, DataLen: Int64): Boolean;
var
fs:tfilestream;
sstr,dstr:string;
begin
if fileexists(fn) then
try
fs:=tfilestream.Create(fn,fmOpenReadWrite);
result:=true;
if fs.Size<DstPos then
exit;
try
setlength(sstr,DataLen);
setlength(dstr,DataLen);

fs.Position:=SrcPos;
fs.Read(sstr[1],DataLen);

fs.Position:=DstPos;
fs.Read(dstr[1],DataLen);

fs.Position:=SrcPos;
fs.Write(dstr[1],DataLen);

fs.Position:=DstPos;
fs.Write(sstr[1],DataLen);
except
result:=false;
end;
finally
fs.Free;
end;
end;
 

Similar threads

后退
顶部