delphi如何合并、分割文件?请贴出源码 如何合并、分割文件?请贴出源码 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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; 建议这样,合并文件时:1.把所有要合并的文件的信息如大小,名称和顺序写入一个a文件中2.创建合并后的文件b3.b文件的前两个字节存放文件a的大小,后8个字节存放文件名4.写入a文件5.按照a文件中的文件顺序,依次把各个要合并的文件写入6.合并文件结束分割文件时1.读取b文件的前2个字节,为a文件的大小2.读取b文件的后8个字节,为a文件的名称3.接着读出a文件4.根据a文件里的文件列表信息依次取出其它文件5.分割文件结束 求解! 高分求助rave6控件。 关于类型转换,怎样将一个oleVariant类型的变量赋值(转换)给一个指定类型的变量,比如将olevariant赋值给TColumns类型的变量 关于Easytable的求助 菜鸟问题,如何建立文件夹???请各位帮忙!!!!! 大富翁真的很奇怪,我有积分,但发不了贴,大家碰到过吗? 很菜问题 如何使用real控件 共享软件注册! 难道没高手了吗? FastReport 显示字段内容如何进行换行 请教如何追加子行??我已经想不出来了!!!
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;
合并文件时:
1.把所有要合并的文件的信息如大小,名称和顺序写入一个a文件中
2.创建合并后的文件b
3.b文件的前两个字节存放文件a的大小,后8个字节存放文件名
4.写入a文件
5.按照a文件中的文件顺序,依次把各个要合并的文件写入
6.合并文件结束
分割文件时
1.读取b文件的前2个字节,为a文件的大小
2.读取b文件的后8个字节,为a文件的名称
3.接着读出a文件
4.根据a文件里的文件列表信息依次取出其它文件
5.分割文件结束