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


本文整理自网络,侵删。

 


//分割文件的函数 
{参数 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;

 
//测试分割 www.delphitop.com
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;

相关阅读 >>

Delphi trunc转换函数

Delphi wmi 取显卡gpu信息

Delphi 将tbitmap与tgpimage转换

Delphi datasnap http用法注意事项

Delphi 获取网络文件大小

Delphi写的dll回调c#

Delphi d10.x 安卓app开发中创建密钥库文件

Delphi中提取网页源代码

Delphi 连接dbf数据

Delphi system.messaging.pas例子

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...