将本地文件的内容读入Rails中的变量


85

我要做的就是从本地文件中获取所有内容,并将其存储在变量中。怎么样?

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

只给了我一部分。在PHP中,我只是使用file_get_contents


1
我觉得这是Windows特有的问题,因为这种解决方案以及zed_0xff提出的解决方案在Mac / Linux上都可以正常工作。我知道在执行File.read时irb会将\ r \ n转换为\ n ...也许与这里相关?
史蒂文

Answers:


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

1
我认为,但给我的长52.实际文件大小的字符串,当我去File.size(“/路径/到/文件”)是1676年
史蒂芬

4
那不是让文件保持打开状态吗?
汤姆·罗西

我喜欢这个!很高兴知道如何保留文件内容类型的标头
Tom Roggero 2013年

这在不使用块的情况下进行读取非常有用,它可以轻松地解析内容并将其设置为其他块可用的变量,而无需创建类。
安德鲁

3
要解决@TomRossi的问题-不,这不会使文件保持打开状态。在File类上调用read可以打开,读取和关闭文件。但是,对文件实例(必须先打开)调用read不会将其关闭。这里调用的方法是ruby-doc.org/core-2.5.0/IO.html#method-c-read,而不是ruby-doc.org/core-2.5.0/IO.html#method-i-阅读
AndrewKS '18


16

在这里回答我自己的问题...原来,这是Windows唯一的怪癖,发生在读取二进制文件(在我的情况下为JPEG)时,这需要在open或File.open函数调用中附加一个标志。我将其修订为open("/path/to/file", 'rb') {|io| a = a + io.read},一切都很好。


10
除非您实际上是将一堆文件串联在一起,否则我将其写为:data = File.open("file", "rb") {|io| io.read}
glenn jackman 2010年

先生,您应该获得一枚奖牌。我花了几个小时试图弄清楚为什么从Windows服务器发送时我的PDF附件不可读,直到我偶然发现了这个答案。
奥古斯托·萨马梅·巴里恩托斯(AugustoSamaméBarrientos),
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.