gpt4 book ai didi

ruby - ruby 什么时候释放它的 File.write 任务?

转载 作者:太空宇宙 更新时间:2023-11-03 18:18:26 25 4
gpt4 key购买 nike

我正在写入一个文件实例。当程序仍在运行时,文件始终为空。当我在脚本执行后检查文件时,文件有内容。

class A
def initialize
@file_ref=File.new("/user/shared/ruby/ruby-example/test.html","w+")
end
def fill
@file_ref.write("whatever\nwhatever\nwhatever\n")
end
end

主要脚本:

require_relative 'A'

a=A.new
a.fill

puts File.size("/user/shared/ruby/ruby-example/test.html")

A 实例完成其工作后,puts 语句将打印 "0",就好像文件是空的一样。确实是在程序执行期间,但如果我启动 irb:

puts File.size("/user/shared/ruby/ruby-example/test.html")
# => 27

$ cat test.html
whatever
whatever
whatever
  1. 我的代码有错吗?
  2. 仅在流程执行后才刷新流是否正常?

最佳答案

当您调用 IO#close 时,Ruby 会刷新 IO 缓冲区或 IO#flush .由于您既未调用 close 也未调用 flush,因此当程序终止并释放打开的文件描述符时,缓冲区将被刷新。

鉴于您的简单示例,一个可能的解决方案是:

class A
def initialize
@file_ref_name = '/user/shared/ruby/ruby-example/test.html'
end
def fill
File.open(@file_ref_name, 'w+') do |file|
file.write("whatever\nwhatever\nwhatever\n")
end
end

end

将一个 block 传递给 IO#open使打开的文件(本例中的 file 变量)在 block 的执行终止后关闭(因此刷新)。

关于ruby - ruby 什么时候释放它的 File.write 任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22456937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com