Civ*_*rix 160 ruby io file errno
我正在尝试创建一个新文件,但事情似乎并没有像我期望的那样工作.这是我尝试过的:
File.new "out.txt"
File.open "out.txt"
File.new "out.txt","w"
File.open "out.txt","w"
Run Code Online (Sandbox Code Playgroud)
根据我在网上阅读的所有内容,所有这些都应该有效但是每一个都给我这个:
ERRNO::ENOENT: No such file or directory - out.txt
Run Code Online (Sandbox Code Playgroud)
这发生在IRB以及ruby文件中.我错过了什么?
zan*_*bri 410
使用:
File.open("out.txt", [your-option-string]) {|f| f.write("write your stuff here") }
Run Code Online (Sandbox Code Playgroud)
您的选择是:
r
- 只读.该文件必须存在. w
- 创建一个空文件进行写入. a
- 附加到文件.如果文件不存在,则创建该文件. r+
- 打开文件以更新读取和写入.该文件必须存在. w+
- 为读取和写入创建一个空文件. a+
- 打开文件进行阅读和追加.如果文件不存在,则创建该文件. 在你的情况下,'w'
是优选的.
或者你可以:
out_file = File.new("out.txt", "w")
#...
out_file.puts("write your stuff here")
#...
out_file.close
Run Code Online (Sandbox Code Playgroud)
GMD*_*GMD 34
尝试
File.open("out.txt", "w") do |f|
f.write(data_you_want_to_write)
end
Run Code Online (Sandbox Code Playgroud)
没有使用
File.new "out.txt"
Run Code Online (Sandbox Code Playgroud)
Chr*_*nch 24
尝试使用w+
写入模式而不仅仅是w
:
File.open("out.txt", "w+") { |file| file.write("boo!") }
Run Code Online (Sandbox Code Playgroud)
tom*_*tom 20
好的,现在我觉得很蠢.前两个肯定不起作用,但后两个起作用.不知道我是如何说服自己的,我曾尝试过这些.很抱歉浪费每个人的时间.
如果这有助于其他任何人,当您尝试在不存在的目录中创建新文件时,可能会发生这种情况.
File.new
并File.open
默认为读取mode('r'
)作为安全机制,以避免可能覆盖文件.'w'
如果我们要输出到文件,我们必须明确告诉Ruby使用写模式(这是最常用的方式).
如果要输出的文本是字符串,而不是写:
File.open('foo.txt', 'w') { |fo| fo.puts "bar" }
Run Code Online (Sandbox Code Playgroud)
或者更糟:
fo = File.open('foo.txt', 'w')
fo.puts "bar"
fo.close
Run Code Online (Sandbox Code Playgroud)
使用更简洁write
:
File.write('foo.txt', 'bar')
Run Code Online (Sandbox Code Playgroud)
write
我们可以使用模式,如有必要'w'
,我们可以使用.'a'
'r+'
open
如果您必须在迭代循环中计算输出并希望在执行此操作时保持文件处于打开状态,则使用块是有用的.write
如果要在一个blast中输出内容然后关闭文件,则非常有用.
有关更多信息,请参阅文档.