关于 Delphi 中流的使用 分割与合并文件的函数
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} //分割文件的函数 {参数 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; end.
分类:
Delphi学习
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?