关于 Delphi 中流的使用:分割与合并文件的函数

本文介绍了一种在Delphi中实现文件分割与合并的方法。通过使用TFileStream和TMemoryStream,该方法能够将大型文件分割成指定大小的小文件,并能重新合并这些小文件以还原原始数据。文章提供了具体的实现代码,包括如何按KB分割文件和如何合并这些分割后的文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 .
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值