私は新しいファイルを作成しようとしていますが、期待どおりに機能していないようです。これが私が試したことです:
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", [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
試して
File.open("out.txt", "w") do |f|
f.write(data_you_want_to_write)
end
使用せずに
File.new "out.txt"
単にw
ではなく、w+
を書き込みモードとして使用してみてください。
File.open("out.txt", "w+") { |file| file.write("boo!") }
わかった、今はバカな気分だ。最初の2つは間違いなく機能しませんが、2つ目は機能します。試したことを自分に納得させる方法がわからない。みんなの時間を無駄にしてすみません。
これが他の人に役立つ場合、存在しないディレクトリに新しいファイルを作成しようとしているときに発生する可能性があります。
ディレクトリが存在しません。 open
はこれらのディレクトリを作成しないため、存在することを確認してください。
私はしばらく前に自分でこれに遭遇しました。
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
は、コンテンツを一度に出力してからファイルを閉じる場合に便利です。
詳細については、 ドキュメント を参照してください。
目的がファイルの作成だけである場合、私が見る最も直接的な方法は次のとおりです。
FileUtils.touch "foobar.txt"
文字列の代わりに定数を使用して、必要なモードを指定することもできます。利点は、定数名にタイプミスをすると、プログラムでランタイム例外が発生することです。
定数はFile::RDONLY
またはFile::WRONLY
またはFile::CREAT
です。必要に応じて組み合わせることもできます。