在Ruby中创建zip压缩档案且不将归档文件保存到磁盘上。

3

我尝试创建ZIP归档文件,但不保存到磁盘。因此,我先写了一个保存到磁盘的方法:

begin
  file = Zip::File.open("#{file_name}.zip", Zip::File::CREATE)
  save_file file_name
  file.add(file_name, file_name)
rescue IOError => e
  puts "Error: #{e}"
ensure
  file.close unless file.nil?
  File.delete file_name
end

这个代码可以正常工作,但是在创建保存存档文件之前需要注意。

其次,我尝试编写这段代码。首先使用StringIO创建zip格式的存档文件,并将所需文件添加到其中;其次,无法以二进制模式保存它们到磁盘上:

string_io = Zip::OutputStream.write_buffer do |zos|
  zos.put_next_entry(file_name)
  zos.write dictionary.join(', ')
end

# Something wrong below
File.open("#{file_name}.zip", 'wb') do |file|
  file.write string_io
  file.close
end

我做错了什么?应该怎样做才是正确的方法?


酷,它可以节省磁盘空间! - itsnikolay
1个回答

4

发现!

string_io = Zip::OutputStream.write_buffer do |zos|
  zos.put_next_entry(file_name)
  zos.write dictionary.join(', ')
end
# Rewind 
string_io.rewind
# Write simply to file in bin mode
IO.write("#{file_name}.zip", string_io.sysread)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接