本文整理自网络,侵删。
//分割文件的函数{参数 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 xe android-uri-管理联系人uri
Delphi excel操作,写了个adodataset转excel的函数
Delphi 判断uefi与 legacy bios启动模式
Delphi 2009 泛型容器单元(generics.collections)[4]: tdictionary<t>
更多相关阅读请进入《Delphi》频道 >>