Zip :: ZipFile:如何在不解压缩zip的情况下修改内部文本文件的内容?

时间:2013-12-20 11:43:30

标签: ruby zip

干杯, 作为红宝石的初学者,我目前正在用红宝石解决我的小世界问题,以便习惯它。现在我正在尝试修改zip容器中文本文件的内容。

结构是

ZIP
  >> diretory/
     >> mytext.text

我能够遍历内容

Zip::ZipFile.open(file_path) do |zipfile|
  files = zipfile.select(&:file?)
  files.each do |zip_entry|
    ## ....?
  end
end

...但我发现很难在不解压缩的情况下修改文本文件。

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:2)

所以在Ben的帮助下,这是一个解决方案:

require "rubygems"
require "zip/zip"
zip_file_name = "src/test.zip"

Zip::ZipFile.open(zip_file_name) do |zipfile|
  files = zipfile.select(&:file?)
  files.each do |zip_entry|
    contents = zipfile.read(zip_entry.name)
    zipfile.get_output_stream(zip_entry.name){ |f| f.puts contents + ' added some text' }
  end
  zipfile.commit
end

我虽然之前尝过这个 - 但无论如何。非常感谢!

答案 1 :(得分:1)

这个剪辑位在myFile.txt的末尾添加了“添加了一些文本”。

Zip::File.open(file_path) do |zipfile|
  contents = zipfile.read('myFile.txt')
  zipfile.get_output_stream('myFile.txt') { |f| f.puts contents + ' added some text' }
end

出于某种原因,如果在使用each迭代存档文件时完成写入(调用get_output_stream),则不会保存对zip文件的修改。 < / p>

编辑:要在通过每个文件迭代文件时修改文件,请使用Zip :: ZipFile.open打开存档(请参阅Chris的答案以获取示例)。

希望这个剪辑位可以帮助您找到正确的方向。