首页 > 解决方案 > 读取一次文件句柄

问题描述

我有一种情况,我想从例程中返回文件句柄。当读取该文件句柄的最后一个字节时,正在读取的文件被删除。这将是一种创建临时文件的简单方法,该文件一旦被读取就会被删除。

Tempfile并不能真正用于此目的。要使用 Tempfile,我必须创建 Tempfile,读取源文件的全部内容并将其写入 Tempfile,倒回 Tempfile,然后返回 Tempfile 对象。很浪费。我只想打开一个文件并返回一个文件句柄,但它会在读取最后一个字节时删除文件。

我可能自己编写这个类,但如果存在,我宁愿使用现有的解决方案。

标签: rubyfile

解决方案


它必须返回文件句柄类型还是可以在文件句柄上工作?如果是后者,那么您可以使用闭包和 lambda。如下所示:

def sp_handle(fname)
  handle = File.open(fname)

  ->(){
    line = handle.gets
    line ? line : (File.unlink(fname); handle.close)
  }

end

推荐阅读