web-dev-qa-db-ja.com

Rubyでファイルを作成する方法

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

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ファイルから発生します。私は何が欠けていますか?

157
Civatrix

つかいます:

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
402
zanbri

試して

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

使用せずに

File.new "out.txt"
33
GMD

単にwではなく、w+を書き込みモードとして使用してみてください。

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

わかった、今はバカな気分だ。最初の2つは間違いなく機能しませんが、2つ目は機能します。試したことを自分に納得させる方法がわからない。みんなの時間を無駄にしてすみません。

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

20
tom

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

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

10
nterry

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は、コンテンツを一度に出力してからファイルを閉じる場合に便利です。

詳細については、 ドキュメント を参照してください。

8
the Tin Man

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

 FileUtils.touch "foobar.txt"
3
Nicola Mingotti

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

定数はFile::RDONLYまたはFile::WRONLYまたはFile::CREATです。必要に応じて組み合わせることもできます。

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

1