Ruby的文档报告使用File.open和块自动关闭文件,否则建议使用close方法显式关闭文件.据说,如果有人忘记在后一种情况下关闭文件,该文件将保持打开状态.如何检查文件是否仍然打开并最终关闭?
如果我决定使用IO类打开文件并使用IO.new(fd)创建新的I/O流:
fd = IO.sysopen("file.txt", "a")
myios = IO.new(fd)
myios.puts "new line"
Run Code Online (Sandbox Code Playgroud)
一旦代码执行,流会自动关闭吗?我怎么检查呢?ObjectSpace.each_object(IO)的使用无助于理解在执行代码后,垃圾收集器或Ruby是否关闭了myios流.
你可以调用IO#关闭吗?在文件对象上:
f = File.open('stuff.txt', 'w')
p f.closed? # => false
f.close
p f.closed? # => true
Run Code Online (Sandbox Code Playgroud)
请记住,除非你坚持使用你的文件变量,否则Ruby的垃圾收集器最终会找到该文件并将其关闭.但是,我认为最好的做法是尽快关闭文件.