Delphi 流分割与合并文件的函数

本文介绍了一种使用Delphi实现文件分割与合并的方法。通过两个函数`SplitFile`和`MergeFile`,可以将大文件分割成多个小文件,并能够重新合并这些小文件以恢复原始文件。此方法适用于需要在网络上传输大文件或进行数据备份等场景。

//分割文件的函数
{参数 1 是要分割的文件名; 参数 2 是要风格文件的大小, 单位是 KB}
{分割后的文件名扩展名用序号替换}
function SplitFile(const FileName: string; Size: Cardinal): Boolean;
var
 fStream: TFileStream;  {原始文件}
 toStream: TMemoryStream; {分文件}
 p,i: Integer;      {p 记录当前指针位置; i 记录这是第几个分的文件}
begin
 Result := False;
 Size := Size * 1024;   {把大小的单位转换为字节}

 fStream := TFileStream.Create(FileName, fmOpenRead);
 p := 0;
 i := 0;
 
 toStream := TMemoryStream.Create;
 
 while p < fStream.Size do
 begin
  toStream.Clear;    {清空上次数据}
  fStream.Position := p; {放好指针位置}
 
  if fStream.Size-p < Size then Size := fStream.Size-p; {最后一个时, 有多少算多少}
 
  toStream.CopyFrom(fStream, Size); {复制}
  toStream.SaveToFile(FileName + '.' + IntToStr(i));    {保存}
  Inc(i);
  p := p + Size;
 end;
 
 fStream.Free;
 toStream.Free;
 Result := True;
end;
 
 
//合并文件, 参数是其中一个分文件名
function MergeFile(const FileName: string): Boolean;
var
 ms: TMemoryStream; {读取分文件}
 fs: TFileStream;  {合并后的文件}
 path: string;
 i: Integer;
begin
 path := ChangeFileExt(FileName,''); {去掉序号扩展名} 
 i := 0;
 
 ms := TMemoryStream.Create;
 fs := TFileStream.Create(path, fmCreate);
 
 while FileExists(path + '.' + IntToStr(i)) do
 begin
  ms.LoadFromFile(path + '.' + IntToStr(i));
  fs.CopyFrom(ms, 0); {TFileStream 不需要 SetSize; 但如果用 TMemoryStream 就需要}
  Inc(i);
 end;
 
 ms.Free;
 fs.Free;
end;

 
//测试分割
procedure TForm1.Button1Click(Sender: TObject);
begin
 SplitFile('c:/temp/test.txt', 10);
end;


//测试合并
procedure TForm1.Button2Click(Sender: TObject);
begin
 MergeFile('c:/temp/test.txt.0');
end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值