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,''); {去掉序号扩展名}
  ShowMessage(path);
  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;

相关阅读 >>

Delphi {$pointermath on} 方便指针操作的编译指令

Delphi感染文件的例子

Delphi stringgrid 实例2:1、获取 stringgrid 的行数、列数; 2、给单元赋值

Delphi 2009 查看所有 unicode 字符

Delphi解析json格式化的日期

Delphi 防止系统睡眠

Delphi xe berlin readprocessmemory writeprocessmemory

Delphi str1.compare 比较两个字符是否相同

Delphi 系统任务栏 窗口状态显示进度

Delphi twebbrowser静音

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



打赏

取消

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

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

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

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

评论

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