查来查去! 好象只能对文件进行压缩.
现在我的要求是对某个文件夹下的所有文件进行压缩,
说白了就是象WinRaR 那样的效果! 我点选那个目录就压缩
那个目录, 解压出来跟压缩前的目录一样.

解决方案 »

  1.   

    我想来想去也是要保存目录! 文件名以及扩展名. 还要递归下一层的目录所有文件.
    或者还有什么好办法! 还有这些目录和文件名称和扩展名称应该怎么处理为好>>.
      

  2.   

    ...concatenate and compress files into one destination file? 
    Author: Robert Kuhlmann  
    uses 
      Zlib; procedure CompressFiles(Files : TStrings; const Filename : String); 
    var 
      infile, outfile, tmpFile : TFileStream; 
      compr : TCompressionStream; 
      i,l : Integer; 
      s : String; begin 
      if Files.Count > 0 then 
      begin 
        outFile := TFileStream.Create(Filename,fmCreate); 
        try 
          { the number of files } 
          l := Files.Count; 
          outfile.Write(l,SizeOf(l)); 
          for i := 0 to Files.Count-1 do 
          begin 
            infile := TFileStream.Create(Files[i],fmOpenRead); 
            try 
              { the original filename } 
              s := ExtractFilename(Files[i]); 
              l := Length(s); 
              outfile.Write(l,SizeOf(l)); 
              outfile.Write(s[1],l); 
              { the original filesize } 
              l := infile.Size; 
              outfile.Write(l,SizeOf(l)); 
              { compress and store the file temporary} 
              tmpFile := TFileStream.Create('tmp',fmCreate); 
              compr := TCompressionStream.Create(clMax,tmpfile); 
              try 
                compr.CopyFrom(infile,l); 
              finally 
                compr.Free; 
                tmpFile.Free; 
              end; 
              { append the compressed file to the destination file } 
              tmpFile := TFileStream.Create('tmp',fmOpenRead); 
              try 
                outfile.CopyFrom(tmpFile,0); 
              finally 
                tmpFile.Free; 
              end; 
            finally 
              infile.Free; 
            end; 
          end; 
        finally 
          outfile.Free; 
        end; 
        DeleteFile('tmp'); 
      end; 
    end; procedure DecompressFiles(const Filename, DestDirectory : String); 
    var 
      dest,s : String; 
      decompr : TDecompressionStream; 
      infile, outfile : TFilestream; 
      i,l,c : Integer; 
    begin 
      // IncludeTrailingPathDelimiter (D6/D7 only) 
      dest := IncludeTrailingPathDelimiter(DestDirectory);   infile := TFileStream.Create(Filename,fmOpenRead); 
      try 
        { number of files } 
        infile.Read(c,SizeOf(c)); 
        for i := 1 to c do 
        begin 
          { read filename } 
          infile.Read(l,SizeOf(l)); 
          SetLength(s,l); 
          infile.Read(s[1],l); 
          { read filesize } 
          infile.Read(l,SizeOf(l)); 
          { decompress the files and store it } 
          s := dest+s; //include the path 
          outfile := TFileStream.Create(s,fmCreate); 
          decompr := TDecompressionStream.Create(infile); 
          try 
            outfile.CopyFrom(decompr,l); 
          finally 
            outfile.Free; 
            decompr.Free; 
          end; 
        end; 
      finally 
        infile.Free; 
      end; 
    end;
      

  3.   

    http://www.somade.com/是个很专业的技术社区,去那里找找吧,或许有你要的答案~