首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

【大神帮忙】-关于多资料的流处理-

2012-09-04 
【大神帮忙】-----------关于多文件的流处理------------------最近在学习研究文件流处理,下面的代码只能对

【大神帮忙】-----------关于多文件的流处理------------------
最近在学习研究文件流处理,下面的代码只能对文件进行单一处理,
请问如何把代码改为可以同时对多文件进行处理,
假定fileList: TStringList为文件列表,那如何让这么多文件用流压到一个文件里,再用流的方式分解出来?

如何改动下面的参考代码,请大神帮看看。。谢了。

Delphi(Pascal) code
//多文件流合并压缩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;


[解决办法]
你用ini保存文件信息也是可以啊。
一个简单的方法都保存到一个文件里
|文件名大小(int)|文件名|文件大小(dword)|文件内容||文件名大小(int)|文件名|文件大小|文件内容|

一个简单的格式即可,计算下偏移量很好分解

热点排行