1

使用块打开文件之后是否会关闭它?

File.open('test.txt') do |txt|
  ...
end

我想知道这个文件是否在这段代码的末尾关闭,或者我是否应该继续调用:

File.close()
4

2 回答 2

5

我想知道的是这个文件是在这段代码的末尾关闭还是我仍然应该调用:

是的,它已关闭。IO::open

在没有关联块的情况下,IO.open 是 ::new 的同义词。如果给出了可选代码块,它将作为参数传递 io ,并且在块终止时将自动关闭 IO 对象。在这种情况下,::open 返回块的值。

f = File.open('doc.txt') do |file|
  file
end

f.closed? # => true

还是我仍然应该打电话:File.close() ?

是的,你可以,如果你的块file在终止之前返回对象,就像我上面的代码一样。或者如果你将file块内的对象分配给一个局部变量,如下所示:

f = nil
File.open('doc.txt') do |file|
  f = file
  # your code
end

f.closed? # => true
于 2013-11-11T17:30:26.870 回答
1

如果您想阅读整个文件,另一种选择:

my_data = File.read('my_file.txt')
于 2013-11-11T21:25:14.117 回答