我正在尝试创建一个新文件,事情似乎并不像我期望的那样工作。以下是我的尝试:
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", "w") do |f| f.write(data_you_want_to_write) end
不使用
File.new "out.txt"
尝试使用"w+"而不是"w"作为写模式:
"w+"
"w"
File.open("out.txt", "w+") { |file| file.write("boo!") }
使用:
File.open("out.txt", [your-option-string]) {|f| f.write("write your stuff here") }
你的选择是:
r
w
a
r+
w+
a+
在你的情况下,'w'更可取。
'w'
或者你可以这样写:
out_file = File.new("out.txt", "w") #... out_file.puts("write your stuff here") #... out_file.close
好吧,现在我觉得自己很蠢。前两个肯定不行,但后两个可以。不知道我是怎么说服自己我已经试过了。抱歉浪费了大家的时间。
为了帮助其他人,当您试图在不存在的目录中创建新文件时,可能会发生这种情况。
目录不存在。确保它作为open存在不会为你创建这些dirs。
open
我之前也碰到过这种事。
还可以使用常量而不是字符串来指定所需的模式。这样做的好处是,如果在常量名中出现拼写错误,程序将引发运行时异常。
常量为File::RDONLY或File::WRONLY或File::CREAT。如果你喜欢,你也可以把它们结合起来。
File::RDONLY
File::WRONLY
File::CREAT
ruby-doc.org上文件打开模式的完整描述
作为一种安全机制,File.new和File.open默认为读取模式('r'),以避免可能覆盖文件。如果我们要输出到文件,我们必须显式地告诉Ruby使用写模式('w'是最常见的方式)。
File.new
File.open
'r'
如果要输出的文本是字符串,而不是写入:
File.open('foo.txt', 'w') { |fo| fo.puts "bar" }
或者更糟:
fo = File.open('foo.txt', 'w') fo.puts "bar" fo.close
使用更简洁的write:
write
File.write('foo.txt', 'bar')
write有允许的模式,所以我们可以在必要时使用'w', 'a', 'r+'。
'a'
'r+'
如果你必须在迭代循环中计算输出,并且想在这样做的时候让文件打开,那么带块的open是有用的。如果你打算在一次爆炸中输出内容,然后关闭文件,write是有用的。
更多信息请参见的文档。
如果目标只是创建一个文件,我认为最直接的方法是:
FileUtils.touch "foobar.txt"
data = 'data you want inside the file'.
你可以使用File.write('name of file here', data)
File.write('name of file here', data)