在 Ruby 中创建 zip 存档而不将存档文件保存到磁盘
Create zip archive without save archiving file to disk in Ruby
我尝试创建 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 存档,其次我无法以 bin 模式将它们保存到磁盘:
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
做错了什么?以及如何正确地做到这一点?
找到了!
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)
我尝试创建 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 存档,其次我无法以 bin 模式将它们保存到磁盘:
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
做错了什么?以及如何正确地做到这一点?
找到了!
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)