189

新しいファイルを作成しようとしていますが、期待どおりに動作していないようです。これが私が試したことです:

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

これは、Ruby スクリプトだけでなく、IRB からも発生します。私は何が欠けていますか?

4

9 に答える 9

467

使用する:

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
于 2011-10-27T12:33:45.093 に答える
38

試す

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

を使用せずに

File.new "out.txt"
于 2011-10-27T04:31:39.690 に答える
29

"w+"ただの代わりに書き込みモードとして使用してみてください"w"

File.open("out.txt", "w+") { |file| file.write("boo!") }
于 2011-10-27T05:40:31.147 に答える
21

わかりました、今、私は愚かだと感じています。最初の 2 つは確実に機能しませんが、2 番目の 2 つは機能します。私がそれらを試したことをどのように自分に納得させたのかわかりません。みんなの時間を無駄にしてごめんなさい。

これが他の人に役立つ場合、存在しないディレクトリに新しいファイルを作成しようとしたときに発生する可能性があります。

于 2012-07-10T21:43:37.307 に答える
14

目的がファイルを作成することだけである場合、私が見る最も直接的な方法は次のとおりです。

 FileUtils.touch "foobar.txt"
于 2019-02-26T07:43:44.657 に答える
11

ディレクトリが存在しません。openこれらのディレクトリは作成されないため、存在することを確認してください。

私はしばらく前にこれに遭遇しました。

于 2014-12-09T03:24:21.353 に答える
0

文字列の代わりに定数を使用して、必要なモードを指定することもできます。利点は、定数名をタイプミスすると、プログラムで実行時例外が発生することです。

定数はFile::RDONLYまたはFile::WRONLYまたはFile::CREATです。お好みでそれらを組み合わせることもできます。

ruby-doc.org のファイル オープン モードの完全な説明

于 2015-11-18T22:18:47.933 に答える