数据压缩 -- 应用[2]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 luckyjan 的 blog

        if mem_f.copyfrom(src_f,afilelen)<>afilelen then raiselastwin32error; //获取压缩流
        mem_f.position := 0;

        lhaexpand(mem_f,dst_f);                    //解压

      finally
        dst_f.free;
        mem_f.free;
      end;
    except
      result:=false;
    end;
  end;

var
   afilename:string;
   fnlen,fsize:integer;
begin
  if not fileexists(lhfile) then exit; //压缩文件不存在!  filepack.lhz

  result:=true;
  try
  src_f := tfilestream.create(lhfile,fmopenread);
  //从临时文件中分离出所有文件的实体
  //src_f 源文件流:  文件名长度 + 文件名 + 文件压缩长度 + 压缩流(被压文件)
  try
    src_f.position := 0;
    while true do begin
      if src_f.size <=src_f.position+1 then break;           //(2.0)如果 irtn<=0 则文件流读取结束
                                                 
      if src_f.read(fnlen,sizeof(integer))<=0 then break;    //(2.1)取得文件名长度
      setlength(afilename,fnlen);                
      if src_f.read(afilename[1],fnlen)<=0 then break;       //(2.2)取得文件名
                                                 
      if src_f.read(fsize,sizeof(integer))<=0 then break;    //(2.3)取得压缩长度

      if getonefile(fsize,afilename) then                    //(2.4)获取压缩文件
      begin                                      
        frmmsg.momsgs.lines.add(afilename+' 解压缩成功!');  frmmsg.update ;
      end else
      begin
        frmmsg.momsgs.lines.add(afilename+' 解压缩不成功!');  frmmsg.update ;
      end;
    end; 
  finally
    src_f.free;
  end;
  except
    result:=false;
  end;

本文关键:数据压缩 -- 应用
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top