//压缩文件名  //压缩文件所在路径              
procedure CreateZipFile(ZipFileName,strCurrentDir: string);
//////VCLZIP  
begin
  ShowMessage(GetCurrentDir);
  SetCurrentDir('./' + strCurrentDir);
  ShowMessage(GetCurrentDir);
  With TVclZip.Create(nil) do
  try
    ZipName := './' + ZipFileName;
    RootDir := './';
    FilesList.Add('*.*');
    Recurse := True; //* Recurse directories */
    StorePaths := True; //* Keep path information */
    PackLevel := 9; //* Highest level of compression */
    zip; //* Return value of Zip is the actual number of files zipped */
  finally
    Free;
  end;
end;调用示例:
CreateZipFile('aaa.zip','aaa')
测试环境:在当前应用程序目录中新增子目录(strCurrentDir),子目录中有多个子目录但是不能有文件,子目录的子目录中有文件,写个过程调用的过程即可。
我在WindowsXP + D6下调试通过,但是在Windows2000 + D6下压缩文件中什么东西也没有。把ROOTDIR换成绝对路径可以达到目的,但是在解压缩之后外面多了一层文件夹,系统中其它模块无法识别。

解决方案 »

  1.   

    需要实现的功能:用程序实现:进入到文件夹,选中所有目录,然后压缩(这样的话,解压的时候没有外层的文件夹)。如果这个行不通的话,大家能不能帮我想想其它的解决方法!下面是我尝试用ZIP命令行参数的方式解决上面的问题,请大家指教:
        zip -r aaa.zip ./
    这样执行的结果是可以压缩当前目录中的文件,但是当前目录中的文件夹没有被压缩,但是参数“-r”的意思是“递归调用”。
    下面是参数的文档,大家可以帮忙分析一下:
    -1 : 最快压缩,压缩率最差。 -9 : 最大压缩,压缩率最佳。 -b : 暂存文件的路径。这个参数一般在要产生的 zip 文件存在,而硬盘现有空间不足时。 -c : 替新增或更新的文件增加一行注解。 -d : 从 zip 文件移出一个文件。 -D : 不要在 zip 文件中储存文件的目录信息。 -f : 以新文件取代现有文件。 -F : 修复已经损毁的压缩文件。 -g : 将文件压缩附加到 zip 文件中。 -h : 显示辅助说明。 -i : 指定要含入的某些特定文件。 -j : 只储存文件的名称,不含目录。 -k : 强迫使用 MSDOS 格式文件名。 -l : 将 CR ( Carriage Return ) LF ( Line Feed ) 转换成 LF,一般是要将 MS-DOS 上的文本文件压缩后拿到 UNIX 下使用时才使用此参数。这只适用于文本文件 ( .txt ),如果用于二进制文件则会造成二进制文件损毁。 -L : 显示 zip 命令的版权。 -m : 将特定文件移入 zip 文件中,并且删除特定文件。 -n : 不压缩特定扩展名的文件。 -o : 将 zip 文件的时间设成最后修正 zip 文件的时间。 -q : 安静模式,不会显示相关讯息和提示。 -r : 包括子目录。 -t : 只处理 mmddyy 日期以后的文件。 -T : 测试 zip 文件是否正常。 -u : 只更新改变过的文件和新文件。 -v : 显示版本资讯或详细讯息。 -x : 不需要压缩的文件。 -y : 将 symbolic link 压缩,而不是压缩所连结到的文件。 -z : 为 zip 文件增加注解。 -# : 设定压缩速度,-0 表示不压缩,-1 表示最快速度的压缩, -9 表示最慢速度的压缩 ( 最佳化的压缩 ),预设值为 -6。-@ : 从标准输入读取文件名称。 
      

  2.   

    问题已解决,其实VCLZIP组件有个RelativePaths属性,设置为True后就解决了!
        谢谢楼上的兄弟!
      

  3.   

    可以使用rar控制台程序压缩,很方便。
    1: RAR a -r -ep1 test  tmp\*
       压缩tmp下的所有文件包括文件夹 到 test.rar文件中。文件中将除去tmp文件夹,达到你需要的效果
    2: cd tmp
       RAR a -r ..\test
       cd ..
       功能同23: RAR x test tttt   解压test文件到 tttt文件夹下,没有此文件夹将创建注:只需要将rar.exe文件拷贝到你需要的路径,就可以直接执行