干杯, 作为红宝石的初学者,我目前正在用红宝石解决我的小世界问题,以便习惯它。现在我正在尝试修改zip容器中文本文件的内容。
结构是
ZIP
>> diretory/
>> mytext.text
我能够遍历内容
Zip::ZipFile.open(file_path) do |zipfile|
files = zipfile.select(&:file?)
files.each do |zip_entry|
## ....?
end
end
...但我发现很难在不解压缩的情况下修改文本文件。
任何帮助表示赞赏!
答案 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
出于某种原因,如果在使用 < / p>
each
迭代存档文件时完成写入(调用get_output_stream),则不会保存对zip文件的修改。
编辑:要在通过每个文件迭代文件时修改文件,请使用Zip :: ZipFile.open打开存档(请参阅Chris的答案以获取示例)。
希望这个剪辑位可以帮助您找到正确的方向。