delphi 流分割与合并文件的函数  
官方Delphi 学习QQ群: 682628230(三千人)
频道

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;

推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.047088146209717 seconds