最近在学习研究文件流处理,下面的代码只能对文件进行单一处理,
请问如何把代码改为可以同时对多文件进行处理,
假定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;
except
resultvalue:=false  ;end;
result:=resultvalue;
end;