[英]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
由于您的示例代码中不保证您的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.