我有一些文件需要批量处理!我已经实现了压缩!(这部分没问题)!
我的问题是我压缩了以后!我必须解压缩!而且需要获得原始文件的大小并且申请内存空间才能实现还原原始文件的操作!
1.我是否应该在压缩的过程中就写入原始的文件大小还是怎样?
2.如果不是那么我在解压的过程中如何从被压缩后的文件中得到原始文件的大小呢?
3.能否帮我提供解压缩的代码(以下是我的压缩过程)!本人菜鸟请各位出手相助!
procedure TForm1.Button1Click(Sender: TObject);
begin
    Findfile(Edit1.Text);
end;FUNCTION Findfile(Path :String):STRING;
var
    Research : TsearchRec;
    Found    : integer;
    ext      : String;
    Files    : TStringlist;
begin
    Files := Tstringlist.Create;
    If Path[Length(Path)] <> '\' then
       Path := Path + '\';
    Found := Findfirst(Path+'*.*',FaAnyFile,Research);
          While Found=0 do
             begin
                if (Research.Name <> '.') and (Research.Name <> '..') then
                    begin
                       If Research.Attr = faDirectory then
                          Findfile(Path+Research.Name+'\')
                       else
                          ext := UpperCase(ExtractFileExt(Research.Name));
                       if ext='.DCM' then
                        begin
                         Zip(Path+Research.Name);
                         //Unzip(Path+Research.Name);
                         form1.ListBox1.Items.Add(Research.Name);
                        end
                    end;
                  Found :=FindNext(Research);
             end;end;FUNCTION Zip(Filename:String):STRING;
var
   Comp        : TCompressionStream;
   SourceStream: TMemoryStream;
   TempStream  : TMemoryStream;
   Count       : integer;
   P           : Pointer;
begin
   SourceStream := TMemoryStream.Create;
   TempStream   := TMemoryStream.Create;
   SourceStream.LoadFromFile(Filename);
   TRY
     Count:= SourceStream.Size;
     Getmem(p,Count);
   Except
     SourceStream.Free;
   end;
   Comp:=TCompressionStream.Create(clFastest,TempStream);
   SourceStream.SaveToStream(Comp);
   Comp.Free;
   TempStream.SaveToFile('d:\'+ExtractFileName(Filename)+'zip');
end;

解决方案 »

  1.   

    procedure CompressStream(FileName: string);
    var
       instream: Tmemorystream;
       zstream: Tcompressionstream;
       outstream: Tmemorystream;
       size: integer;
    begin
       inStream := TMemoryStream.Create;
       try
          inStream.LoadFromFile(FileName);
          if instream.Size = 0 then
             exit;
          size := instream.size;
          outstream := Tmemorystream.create;
          zstream := Tcompressionstream.Create(clmax, outstream);
          try
             instream.SaveToStream(zstream);
             zstream.free;
             outstream.Position := 0;
             instream.clear;
             instream.WriteBuffer(size, sizeof(size));
             instream.CopyFrom(outstream, 0);
          finally
             outstream.free;
          end;
          instream.SaveToFile(FileName);
       finally
          inStream.Free;
       end;
    end;procedure DecompresSstream(FileName: string);
    var
       instream: Tmemorystream;
       zstream: Tdecompressionstream;
       outstream: Tmemorystream;
       size: integer;
       buffer: pchar;
    begin
       inStream := TMemoryStream.Create;
       inStream.LoadFromFile(FileName);
       try
          if instream.Size = 0 then
             exit;      instream.Position := 0;
          instream.ReadBuffer(size, sizeof(size));
          getmem(buffer, size);
          outstream := Tmemorystream.create;
          zstream := Tdecompressionstream.Create(instream);
          try
             zstream.Readbuffer(buffer^, size);
             outstream.WriteBuffer(buffer^, size);
             outstream.Position := 0;
             instream.clear;
             instream.CopyFrom(outstream, 0);
          finally
             zstream.free;
             outstream.Free;
             freemem(buffer);
          end;
       finally
          inStream.SaveToFile(fileName);
          inStream.Free;
       end;
    end;
      

  2.   


      看看控件安装是否有错误? 先测试一下DEMO
      

  3.   

    我有套源码..是用zlib写的压缩包..要的话留E-MAIL
      

  4.   

    好的!谢谢了![email protected]
      

  5.   

    TO:yukileo
    也发一份给我好吗!我的E-MAIL:[email protected]