我正在尝试打开一个不存在的文件并写入它,但是当我运行该脚本时,没有创建任何文件。
这是代码行
File.open("valid_policies.txt", 'a+').write(policy_number.to_s + "\n")
答案 0 :(得分:2)
而不是使用.write
而不是尝试:
File.open("valid_policies.txt", 'a+') {|f| f.write(policy_number.to_s + "\n") }
答案 1 :(得分:0)
您正在使用:
File.open("valid_policies.txt", 'a+').write(policy_number.to_s + "\n")
这是open
的非阻止形式,不会自动关闭文件。这意味着数据很可能没有写入文件,而是位于等待刷新/同步的IO缓冲区中。您可以添加close
,但这只会传播非惯用代码。
相反,您可以使用:
File.write("valid_policies.txt", policy_number.to_s + "\n")
File.write
自动创建然后写入文件然后关闭它。它会覆盖现有文件。
如果您不确定该文件是否存在并且想要创建该文件,或者追加,则使用File.open
a
}模式而不是a+
。来自the mode documentation:
“a”只写,每次写入调用都会在文件末尾附加数据。 如果文件不存在,则创建一个用于写入的新文件。
使用a+
会起作用,但它也会不必要地打开文件进行阅读。除非你确定这是你必须做的事情,否则不要这样做。
如果我需要追加我会使用:
File.open('valid_policies.txt', 'a') do |fa|
fa.puts policy_number
end
那是惯用的Ruby。 puts
会自动“字符串化”policy_number
如果它有一个to_s
方法,它应该有,因为你已经调用它,它也会自动添加尾随“\ n “如果它不存在于字符串的末尾。此外,使用open
的块形式将在块存在时自动关闭文件,这是智能家务。