Ruby – 在内存中创建文件

无论如何在Ruby中编写以下代码而不将文件写入磁盘?

temp_file = 'path/to/file.csv' users = [a@bc, c@ba] CSV.open(temp_file, "w") do |csv| csv << data_for_report end Reports.sendreport users temp_file File.delete(temp_file) 

Reports.sendreport附加一个文件并发送一封电子邮件,因此它需要是一个文件……

试试其中一个mmapgem。 如果库采用文件名,那么这是你的选择。

但是,如果它可以接受类文件对象,则可以使用StringIO。

您可以考虑更改Reports内容,使其更具通用性。 这取决于它用于创建邮件消息的内容 – 这可能是微不足道的。

你可以使用TempfileTempfile将文件写入光盘,因此它不适合您的请求。

但我认为Tempfile提供了您需要的一些function:

当Tempfile对象被垃圾收集时,或者当Ruby解释器退出时,其关联的临时文件将被自动删除。

例:

 require 'tempfile' require 'csv' data_for_report = [1,2,3,4] temp_file = Tempfile.new('foo') CSV.open(temp_file, "w") do |csv| csv << data_for_report end