如何在Ruby中创build一个文件

我试图创build一个新的文件,事情似乎并没有像我期望的那样工作。 以下是我所尝试的:

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文件。 我错过了什么?

使用:

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

你的select是:

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

在你的情况下, 'w'是可取的。

或者你可以有:

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

尝试

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

没有使用

 File.new "out.txt" 

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

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

好,现在我觉得很蠢 前两个绝对不行,但后两个做。 不知道我如何说服我的自我,我曾尝试过。 对不起浪费大家的时间

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

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

我一会儿就碰到了这个。

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

如果要输出的文本是一个string,而不是写入:

 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+'如果需要'r+'话。

如果必须在迭代循环中计算输出,并且希望保持文件的打开状态,则用块open是非常有用的。 如果您要在一次爆炸中输出内容,然后closures文件, writefunction非常有用。

有关更多信息,请参阅文档 。

你也可以使用常量而不是string来指定你想要的模式。 好处是如果你用一个不变的名字打字,你的程序会引发一个运行时exception。

常量是File::RDONLYFile::WRONLYFile::CREAT 。 如果你喜欢,你也可以把它们组合起来。

在ruby-doc.org上完整描述文件打开模式