繁体   English   中英

如何在Ruby中关闭和删除文件?

[英]How to close and delete a file in Ruby?

假设我在Ruby中打开一个文件,如下所示:

f = File.open('diagram.txt', 'r')

现在,为了关闭并删除该文件,我有以下代码:

begin
  f = File.open('diagram.txt', 'r')
ensure
  if !f.nil? && File.exist?(f)
    f.close unless f.closed? 
    File.delete(f)
  end
end

我发现这段代码太复杂了,如果f已经关闭, File.exist?(f)会失败。 那么,避免关闭和删除引发异常的文件的正确方法是什么?

注意:我知道将块传递给File.open将直接关闭文件,但是,我正在寻找关闭和删除的一般方法。

为什么不在关闭后删除文件而不依赖于对象而是依赖于文件名本身?

begin
  f = File.open('diagram.txt', 'r')
ensure
  f.close unless f.nil? or f.closed?
  File.delete('diagram.txt') if File.exists? 'diagram.txt'
end

处理Errno :: ENOENT异常

由于您的示例代码中不保证您的diagram.txt文件存在,因此更大的问题是处理Errno :: ENOENT异常。 您可以在自闭块中调用File#open ,然后在尝试打开或删除丢失的文件时使用rescue来处理异常。 例如:

begin
  File.open('diagram.txt', 'r') do |f|
    # do something with file
    File.delete(f)
  end
rescue Errno::ENOENT
end

根据您的具体情况,可以使用Tempfile.create 来自文档

如果给出了一个块,那么将构造一个File对象,并以该对象作为参数调用该块。 在块终止后,File对象将自动关闭,并暂时删除临时文件。 该调用返回块的值。

(强调我的)

用法:

require 'tempfile'

Tempfile.create('diagram.txt') do |f|
  # Do something with the file
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM