【问题标题】:Read contents of a local file into a variable in Rails将本地文件的内容读入 Rails 中的变量
【发布时间】:2011-03-04 13:50:37
【问题描述】:

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

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

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

【问题讨论】:

  • 我觉得这是一个独特的 Windows 问题,因为这个解决方案以及 zed_0xff 提出的解决方案在 Mac/Linux 上运行得非常好。我知道 irb 在执行 File.read 时将 \r\n 变为 \n ...也许这与这里有关?

标签: ruby-on-rails ruby


【解决方案1】:
data = File.read("/path/to/file")

【讨论】:

  • 我是这么想的,但这给了我一个长度为 52 的字符串。当我执行 File.size("/path/to/file") 时的实际文件大小是 1676。
  • 这不是让文件保持打开状态吗?
  • 我喜欢这个!很高兴知道如何保留文件内容类型的标题
  • 这对于在不使用块的情况下读取很有用,允许轻松解析内容并将其设置为其他块可用的变量,而无需创建类。
  • 解决@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-read
【解决方案2】:

如果你有最近的 ruby​​ 解释器(即 >= 1.9.2),我认为你应该考虑使用 IO.binread("/path/to/file")

你可以在这里找到IO 类文档http://www.ruby-doc.org/core-2.1.2/IO.html

【讨论】:

  • 这更短,并为您关闭文件。
【解决方案3】:

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

【讨论】:

  • 除非你真的将一堆文件连接在一起,否则我会写成:data = File.open("file", "rb") {|io| io.read}
  • 您先生,应该获得奖章。我花了好几个小时试图弄清楚为什么我的 PDF 附件在从 Windows 服务器发送时无法读取,直到我偶然发现了这个答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-05
  • 2018-06-12
  • 1970-01-01
相关资源
最近更新 更多