gpt4 book ai didi

ruby - 如何在 ruby​​ 中创建没有临时文件的 zip 文件?

转载 作者:数据小太阳 更新时间:2023-10-29 07:40:52 25 4
gpt4 key购买 nike

我用一些生成的内容创建了一个 zip 文件(换句话说:存档中的文件不存在,内容是在我的脚本中构建的)。

我使用的脚本与此类似:

#~ gem 'rubyzip', '=1.1.0'
require 'zip/zip'

zipname = 'test.zip'
File.delete(zipname) if File.exists?(zipname) #delete previous version

Zip::ZipFile.open(zipname, Zip::ZipFile::CREATE) do |zipfile|
1.upto(100) do |i| #Just some testfiles with content
zipfile.get_output_stream("%08i.txt" % i) do |output_entry_stream| #Filename
output_entry_stream.write("Testcontent %08i" % i) #generated content
end
sleep 1 #sleep some time to see the temporary files
end #testdocs
end #ZipFile.open(zipname)

这很好用,我得到了包含正确数据的 zip。

但是在 zip 创建过程中我有很多临时文件。压缩完成后它们会被删除,但文件在创建过程中会打扰我。如果进程引发异常,那么我必须手动删除它们。

我在 Zip::VERSION 2.0.2 和 1.1.0 中有这种行为(使用 gem ruby​​zip)

  • 我可以避免这个临时文件吗?
  • 如果不是:我可以为他们确定一个(临时)文件夹吗?

最佳答案

请参阅“How can I generate zip file without saving to the disk with Ruby?”中的答案

我改编了您的示例以证明它有效。

require 'zip/zip'

zipname = 'test.zip'
File.delete(zipname) if File.exists?(zipname) #delete previous version

stringio = Zip::ZipOutputStream::write_buffer do |zio|
1.upto(5) do |i| #Just some testfiles with content
zio.put_next_entry("test#{i}.txt") #Filename
zio.write("Testcontent %08i" % i) #generated content
sleep 1 #sleep some time to see the temporary files
end
end
stringio.rewind #reposition buffer pointer to the beginning
File.new("test.zip","wb").write(stringio.sysread) #write buffer to zipfile

关于ruby - 如何在 ruby​​ 中创建没有临时文件的 zip 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23957178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com