IT-Swarm.Net

如何在Ruby中创建文件

我正在尝试创建一个新文件,但事情似乎并没有像我期望的那样工作。这是我尝试过的:

File.new "out.txt"
File.open "out.txt"
File.new "out.txt","w"
File.open "out.txt","w"

根据我在网上阅读的所有内容,所有这些都应该有效但是每一个都给我这个:

ERRNO::ENOENT: No such file or directory - out.txt

这发生在IRB和Ruby文件中。我错过了什么?

155
Civatrix

使用:

File.open("out.txt", [your-option-string]) {|f| f.write("write your stuff here") }

您的选择是:

  • r - 只读。该文件必须存在。.
  • w - 创建一个空文件进行写入。.
  • a - 附加到文件。如果文件不存在,则创建该文件。.
  • r+ - 打开文件以进行读取和写入更新。该文件必须存在。.
  • w+ - 为读取和写入创建一个空文件。.
  • a+ - 打开文件进行阅读和追加。如果文件不存在,则创建该文件。.

在您的情况下,'w'更可取。.

或者你可以:

out_file = File.new("out.txt", "w")
#...
out_file.puts("write your stuff here")
#...
out_file.close
399
zanbri

快速,可靠且价格合理的云托管

注册并在30天内获得$50奖金!

尝试

File.open("out.txt", "w") do |f|     
  f.write(data_you_want_to_write)   
end

没有使用

File.new "out.txt"
33
GMD

尝试使用w+作为写模式而不仅仅是w

File.open("out.txt", "w+") { |file| file.write("boo!") }
24
Chris Bunch

好的,现在我觉得很蠢。前两个肯定不起作用,但后两个起作用。不知道我是如何说服自己的,我曾尝试过这些。很抱歉浪费每个人的时间。.

如果这有助于其他任何人,当您尝试在不存在的目录中创建新文件时,可能会发生这种情况。.

21
tom

该目录不存在。确保它存在,因为open不会为你创建这些目录。.

我不久就遇到了这个问题。.

11
nterry

File.newFile.open默认为读取模式('r')作为安全机制,以避免可能覆盖文件。如果我们要输出到文件,我们必须明确地告诉Ruby使用写模式('w'是最常用的方式)。.

如果要输出的文本是字符串,而不是写:

File.open('foo.txt', 'w') { |fo| fo.puts "bar" }

或者更糟:

fo = File.open('foo.txt', 'w')
fo.puts "bar"
fo.close

使用更简洁的write

File.write('foo.txt', 'bar')

write允许模式,因此我们可以在必要时使用'w''a''r+'。.

如果您必须在迭代循环中计算输出并希望在执行此操作时保持打开文件,则带有块的open非常有用。如果要在一次爆炸中输出内容然后关闭文件,则write非常有用。.

有关详细信息,请参阅 文档 。.

8
the Tin Man

如果目标只是创建一个文件,我看到的最直接的方法是:

 FileUtils.touch "foobar.txt"
3
Nicola Mingotti

您还可以使用常量而不是字符串来指定所需的模式。好处是如果您以常量名称输入拼写错误,您的程序将引发运行时异常。.

常量是File::RDONLYFile::WRONLYFile::CREAT。如果您愿意,也可以将它们组合起来。.

Ruby-doc.org上文件打开模式的完整描述

1
Alexander Tamoykin