如何在Ruby中创建文件

问题描述 投票:161回答:8

我正在尝试创建一个新文件,但似乎也无法正常运行。这是我尝试过的:

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脚本发生的。我想念什么?

ruby file io errno
8个回答
410
投票

用途:

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

35
投票

尝试

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

不使用

File.new "out.txt"

24
投票

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

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

20
投票

[好,现在我觉得很蠢。前两个肯定不起作用,但后两个却起作用。不知道我如何说服自己尝试过它们。很抱歉浪费大家的时间。

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


11
投票

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

我前一段时间碰到这个。


9
投票

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很有用。

请参阅the documentation以获取更多信息。


5
投票
如果目标只是创建文件,那么我看到的最直接的方法是:

0
投票
您还可以使用常量而不是字符串来指定所需的模式。这样做的好处是,如果您使用常量名称输入错误,程序将引发运行时异常。
© www.soinside.com 2019 - 2024. All rights reserved.