我正在尝试创建一个新文件,但似乎也无法正常运行。这是我尝试过的:
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") }
您的选择在哪里:
r
-只读。该文件必须存在。 w
-创建一个空文件进行写入。 a
-附加到文件。如果文件不存在,则创建该文件。 r+
-打开文件以更新读写。该文件必须存在。 w+
-创建一个用于读取和写入的空文件。 a+
-打开文件进行读取和追加。如果文件不存在,则创建该文件。 根据您的情况,最好是'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!") }
[好,现在我觉得很蠢。前两个肯定不起作用,但后两个却起作用。不知道我如何说服自己尝试过它们。很抱歉浪费大家的时间。
如果这对其他人有帮助,当您尝试在不存在的目录中创建新文件时,可能会发生这种情况。
该目录不存在。确保它存在,因为open
不会为您创建这些目录。
我前一段时间碰到这个。
File.new
和File.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以获取更多信息。