文件未在Ruby脚本中创建

时间:2015-07-16 16:33:54

标签: ruby file

我正在尝试打开一个不存在的文件并写入它,但是当我运行该脚本时,没有创建任何文件。

这是代码行

File.open("valid_policies.txt", 'a+').write(policy_number.to_s + "\n")

2 个答案:

答案 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的块形式将在块存在时自动关闭文件,这是智能家务。