`

使用ruby生成zip文件

阅读更多
首先安装rubyzip:

gem install rubyzip

《Ruby Cookbook》里面简要地介绍了如何使用rubyzip读写zip文件,代码如下:
# 写zip
require 'rubygems'
require 'zip/zipfilesystem'

Zip::ZipFile.open('zipfile.zip', Zip::ZipFile::CREATE) do |zip|
  zip.file.open('file1', 'w') { |f| f << 'This is file 1.' }
  zip.dir.mkdir('sub_dir')
  zip.file.open('sub_dir/file2', 'w') { |f| f << 'This is file 2.' }
end

但实际上这段代码没什么用处,一般我们都是要把已有的文件或文件夹压缩成zip,要怎么办呢?基本想法是递归遍历给定文件(目录),然后把文件一个一个的加入zip文件中。代码如下:
def compress
  Zip::ZipFile.open 'zipfile.zip', Zip::ZipFile::CREATE do |zip|
    add_file_to_zip('dir', zip)
  end
end

def add_file_to_zip(file_path, zip)
  if File.directory?(file_path)
    Dir.foreach(file_path) do |sub_file_name|
      add_file_to_zip("#{file_path}/#{sub_file_name}", zip) unless sub_file_name == '.' or sub_file_name == '..'
    end
  else
    zip.add(file_path, file_path)
  end
end

其实最主要的就是ZipFile类的add方法,第一个参数指定zip文件中的路径,第二个参数指定要被压缩的文件的路径。

另外还要注意的是Dir.foreach会返回指定目录中的所有子文件(目录),包括"."和"..",所以要做额外的判断。
分享到:
评论
5 楼 lgn21st 2008-03-16  
如果已经拿到了csv文件,就用OO转成Excel成么? ---非程序员思路
4 楼 iceskysl 2008-03-15  
有没有遇到过在linix下打包传给windows文件名和内容都变成乱码的了?

我遇到了,搞了好久搞不定,有人指教下。
http://iceskysl.1sters.com/?action=show&id=229
3 楼 neodoxy 2008-01-05  
直接OS调用zip
2 楼 haiyang 2008-01-03  
按照第一位的调通了,第二位的不知道是什么意思呢?
1 楼 gigix 2007-10-23  
这个东西,我以前用过,后来发现还是更直接的办法也更简单
system "zip -r foo.zip foo/"

相关推荐

    odf-report, 在给定模板(. odt ) 和数据的情况下生成ODF文件,替换标记.zip

    odf-report, 在给定模板(. odt ) 和数据的情况下生成ODF文件,替换标记 odf报告通过在以前创建的. odt 文件中创建字符串。...根据流行的请求,现在使用 rubyzip ~&gt; 1.1.0使用 Zip::OutputStream.write_buff

    生成Ruby代码质量报告RubyCritic.zip

    RubyCritic 集成 Reek,Flay 和 Flog 这 3 个代码静态分析的工具,对你的Ruby代码进行静态分析并生成代码质量报告。运行效果:您的项目概览,并且可以对代码打分(百分制)根据各自的坏味道数量建立文件索引(对...

    warbler, Warbler chirpily构建你的ruby 应用程序的. war 文件.zip

    warbler, Warbler chirpily构建你的ruby 应用程序的....Rails 或者 rack 应用程序中生成一个 Java jar 或者war文件。 to提供了一种最小。灵活的ruby类似的方法,用于将所有应用程序文件分发到Java环境。

    zipline:一个让您从Rails流式传输zip文件的gem

    不再需要大的磁盘空间或内存分配来生成zip,甚至是巨大的zip。 因此它适用于Heroku。 用户立即开始下载,这减少了Heroku上的延迟,下载时间和超时。 Zipline现在取决于,如果您有更高级的用例,则可能只想直接...

    zip_tricks:针对Ruby的紧凑型ZIP文件编写阅读,适用于流应用程序

    zip_tricks当前可以满足我们所有的压缩需求(每天生成数百万个ZIP文件),因此我们非常有信心它与大量未归档的最终用户应用程序广泛兼容。 要求 Ruby 2.1+语法支持(带有默认值的关键字参数)和有效的zlib(所有...

    跨平台文档生成器node-doczar.zip

    注释格式简约大方,易读,使用一个简单的模型来生成大型文件和复杂的条目。 Doczar 自身是完全跨平台的,开源并且非常好用。 特性 描述模块和面向对象结构 继承,多继承和 Java 接口 Github 风格的 markdown ...

    jekyll, 在 ruby 中,osm是一个博客,static 站点生成器.zip

    jekyll, 在 ruby 中,osm是一个博客,static 站点生成器 ( 译): Jekyll 。 osm是一个简单,博客感知,static 站点生成器适合个人,项目或者组织网站。 就像一个基于文件的CMS,没有所有的复杂性。 Jekyll获取你的...

    reek, ruby的代码异味 检测器.zip

    reek, ruby的代码异味 检测器 用于 ruby的 代码异味 检测器目录概述快速入门示例支持的红宝石固定气味警告源代码代码异味配置文件命令行接口配置文件配置加载程序配置选项生成一个'待办事项'列表注意:要注意多个...

    yard, YARD是一个 ruby 文档工具 Y 代表"Yay"!.zip

    yard, YARD是一个 ruby 文档工具 Y 代表"Yay"!... 概要YARD是 ruby 编程语言的文档生成工具。 用户可以生成一致的。可用的文档,可以很容易地导出到许多格式,也支持扩展自定义类级定义( 比如自定义类级别定义) 。 bel

    rubyinstaller-devkit-2.5.7-1-x64.zip

    | 15 | bundle exec jekyll build | 您只需构建您的站点(而不是在本地提供),然后您可以将生成的文件上传到您的服务器(这将生成与_config.yml中配置变量url的值的规范链接) | | 16 | jekyll clean | 清空编译_site...

    JAVA上百实例源码以及开源项目

     Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,...

    JAVA上百实例源码以及开源项目源代码

     Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,...

    票务系统:使用Rails和TDD构建票务系统

    使用Ruby on Rails构建的简单的票证生成器和跟踪系统。 使用的主要技术 Ruby 2.7.X Rails 6.1 PostgreSQL 宝石 下载(或克隆)并运行应用程序 如果您想去票务系统,请按照以下步骤操作: 下载.zip文件或使用git ...

    基于Git制作电子书GitBook.zip

    使用GitBook制作电子书,必备两个文件:README.md和SUMMARY.md。README.md多为电子书的简介内容,SUMMARY.md用来定义电子书章节结构,如: 同时,GitBook还支持嵌入JavaScript的交互式内容,未来版本会支持Python、...

    SublimeTmpl-master.zip

    功能说明:快速生成文件模板。 使用方法:SublimeTmpl默认的快捷键如下,如果快捷键设置冲突可能无效。 Ctrl+Alt+h 新建 html 文件 Ctrl+Alt+j 新建 javascript 文件 Ctrl+Alt+c 新建 css 文件 Ctrl+Alt+p...

    puphpet:托管puphpet.com生成的zip的解压缩版本

    它包括用于获取PuPHPet版本ZIP文件副本并将其导入回该项目的最少工具。 该项目包含一个composer.json文件,从而可以使用composer将puphpet包含在另一个目标项目中。 还有许多事情可以改进。 对于这些,请参阅: ...

Global site tag (gtag.js) - Google Analytics