我正在尝试创建一个新文件,事情似乎并不像我期望的那样工作。以下是我的尝试:

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脚本中实现。我错过了什么?


当前回答

Use:

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

其他回答

文件。new和File。打开默认读模式('r')作为一种安全机制,以避免可能覆盖文件。如果我们要输出到文件,我们必须显式地告诉Ruby使用写模式('w'是最常见的方式)。

如果要输出的文本是字符串,而不是写入:

File.open('foo.txt', 'w') { |fo| fo.puts "bar" }

或者更糟:

fo = File.open('foo.txt', 'w')
fo.puts "bar"
fo.close

使用更简洁的写法:

File.write('foo.txt', 'bar')

写有模式,所以我们可以使用'w', 'a', 'r+'如果必要的话。

如果您必须在迭代循环中计算输出,并且希望在此过程中保持文件打开,则使用块打开非常有用。写是有用的,如果你要输出内容在一个爆炸,然后关闭文件。

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

还可以使用常量而不是字符串来指定所需的模式。这样做的好处是,如果在常量名中出现拼写错误,程序将引发运行时异常。

常量为File::RDONLY或File::WRONLY或File::CREAT。如果你喜欢,你也可以把它们结合起来。

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

Use:

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

试着用“w+”而不是“w”作为写模式:

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

目录不存在。确保它以开放的方式存在不会给你带来脏东西。

我之前也碰到过这种事。