【大神帮忙】-----------关于多文件的流处理------------------
最近在学习研究文件流处理,下面的代码只能对文件进行单一处理,
请问如何把代码改为可以同时对多文件进行处理,
假定fileList: TStringList为文件列表,那如何让这么多文件用流压到一个文件里,再用流的方式分解出来?
如何改动下面的参考代码,请大神帮看看。。谢了。
//多文件流合并压缩procedure ys_File(vfile:string;var Target:TMemoryStream;);{vfile: 文件target: 后输出目标流 》》》------------------------- 后文件SIZE=原文件SIZE+[INI 压缩信息文件]的SIZE+存储[INI 压缩信息文件]的大小数据类型的SIZE---------------------------}var tmpstream,inistream:TFileStream; FileSize:integer; inifile:TINIFILE; filename:string;begin //打开文件 tmpstream:=TFileStream.Create(vFile,fmOpenread or fmShareExclusive); try //向 [临时 压缩文件流] 尾部写入 [原文件流] Target.Seek(0,soFromEnd); Target.CopyFrom(tmpstream,0); //取得文件路径 ,生成 [INI 压缩信息文件] filename:=ExtractFilePath(paramstr(0))+'tmp.in_'; inifile:=TInifile.Create(filename); inifile.WriteString('file1','filename',ExpandFileName(pchar(vFile)));//取得全路径 inifile.WriteInteger('file1','filesize',Target.Size); inifile.WriteDateTime('file1','fileDate',now()); inifile.Free ; //读入 [INI 压缩信息文件流] inistream:=TFileStream.Create(filename,fmOpenread or fmShareExclusive); try //继续在 [临时 压缩文件流] 尾部加入 [INI 压缩信息文件] inistream.Position :=0; Target.Seek(0,sofromend); Target.CopyFrom(inistream,0); //计算当前 [INI 压缩信息文件] 的大小 FileSize:=inistream.Size ; //继续在 [临时 文件尾部] 加入 [INI 压缩信息文件] 的SIZE信息 Target.WriteBuffer(FileSize,sizeof(FileSize)); finally inistream.Free ; deletefile(filename); end; finally tmpstream.Free; end;end; //多文件流解压function Tmyzap.UnZabIt(infileName: string;):boolean;var inStream,inistream,filestream_ok: TFileStream; outStream:tmemorystream; //临时内存流 inifile:TINIFILE; //临时INI文件 FileSize:integer; // 文件的SIZE resultvalue:boolean;//返回值begintry inStream := TFileStream.create(inFIleName, fmOpenRead); try outStream := tmemorystream.create; try jy_stream(insTream,OutStream); //生成临时INI文件 inistream:=TFileStream.create(ExtractFilePath(paramstr(0))+'tmp.in_', fmCreate); try //指向存储解码信息的INTEGER型变量位置 OutStream.Seek(-sizeof(FileSize),sofromend); //读入变量信息 OutStream.ReadBuffer(FileSize,sizeof(FileSize)); //指向解码信息位置 OutStream.Seek(-(FileSize+sizeof(FileSize)),sofromend); //将解码信息读入INI流中 inistream.CopyFrom(OutStream,FileSize); //释放INI文件流 inistream.Free ; //读入INI文件信息 inifile:=TINIFILE.Create(ExtractFilePath(paramstr(0))+'tmp.in_'); filestream_ok:=TFileStream.create(ExtractFilePath(paramstr(1))+inifile.ReadString('file1','filename','wnhoo.zzz'),fmCreate); try OutStream.Position :=0; filestream_ok.CopyFrom(OutStream,inifile.ReadInteger('file1','filesize',0)); finally filestream_ok.Free ; end; inifile.Free; finally //删除临时INI文件 deletefile(ExtractFilePath(paramstr(0))+'tmp.in_'); end; // finally OutStream.free; end; finally inStream.free; end;exceptresultvalue:=false ;end;result:=resultvalue;end;