ローカルファイルの内容をRailsの変数に読み込みます


87

私がやりたいのは、ローカルファイルからすべてのコンテンツを取得し、それを変数に格納することだけです。どうやって?

File.read(@icon.full_filename).each {|l| r += l}

その一部しかくれません。PHPでは、を使用しましたfile_get_contents


1
この解決策とzed_0xffによって提案された解決策はMac / Linuxで完全に機能するため、これはWindows独自の問題だと思います。File.readを実行するとirbが\ r \ nを\ nに変えることを知っています...おそらくそれはここに関連していますか?
スティーブン

回答:


165
data = File.read("/path/to/file")

1
私はそれを考えたが、私はFile.sizeは(「/に/ファイル/パス」)1676で行くとき、それは私に長さ52実際のファイルサイズの文字列を与える
スティーブン・

4
それはファイルを開いたままにしませんか?
トム・ロッシ

私はこれが好きです!ファイルコンテンツタイプからヘッダーを保持する方法を知っておくと便利です
Tom Roggero 2013

これは、ブロックを使用せずに読み取るのに便利であり、クラスを作成しなくても、コンテンツを簡単に解析して、他のブロックで使用できる変数に設定できます。
アンドリュー

3
@TomRossiの質問に対処するために-いいえ、これはファイルを開いたままにしません。Fileクラスでreadを呼び出すと、ファイルが開いたり、読み取られたり、閉じられたりします。ただし、ファイルのインスタンス(最初に開く必要があった)でreadを呼び出しても、ファイルは閉じられません。ここで呼び出されるメソッドは、ruby-doc.org / core-2.5.0 / IO.html#method-i-ではなくruby-doc.org/core-2.5.0/IO.html#method-c-readです。読む
AndrewKS 2018

18

IO.binread("/path/to/file")最近のRubyインタープリター(つまり> = 1.9.2)がある場合は、使用を検討する必要があると思います。

あなたは見つけることができるIOここではクラスのドキュメントをhttp://www.ruby-doc.org/core-2.1.2/IO.html


2
これは短く、ファイルを閉じます。
ロブ

16

ここで私自身の質問に答える...それは、openまたはFile.open関数呼び出しで追加のフラグを必要とするバイナリファイル(私の場合はJPEG)を読み取るときに発生するWindowsのみの癖であることがわかりました。私はそれをに修正しましたopen("/path/to/file", 'rb') {|io| a = a + io.read}、そしてすべては大丈夫でした。


10
:あなたが実際に一緒にたくさんのファイルを連結している場合を除きとして、私はちょうどそれを書きたいdata = File.open("file", "rb") {|io| io.read}
グレンはジャックマン

あなたは、メダルに値する。この答えに出くわすまで、Windowsサーバーから送信されたときにPDFの添付ファイルが読み取れない理由を理解しようとして、何時間も費やしました。
オーガストサマメバリエントス2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.