ruby - 在 Ruby 中将二进制文件读取为字符串

标签 ruby string file-io

我需要一种简单的方法来获取 tar 文件并将其转换为字符串(反之亦然)。有没有办法在 Ruby 中做到这一点?我最好的尝试是这样的:

file = File.open("path-to-file.tar.gz")
contents = ""
file.each {|line|
  contents << line
}

我认为这足以将它转换为字符串,但是当我尝试像这样写回它时......

newFile = File.open("test.tar.gz", "w")
newFile.write(contents)

这不是同一个文件。执行 ls -l 显示文件大小不同,尽管它们非常接近(打开文件会显示大部分内容完好无损)。我是否犯了一个小错误或完全不同(但可行)的方法来完成此任务?

最佳答案

首先,您应该将文件作为二进制文件打开。然后,您可以通过一条命令读取整个文件。

file = File.open("path-to-file.tar.gz", "rb")
contents = file.read

这将使您获得整个文件的字符串。

在那之后,您可能想要file.close。如果不这样做,file 将在垃圾回收之前不会关闭,因此在打开时会稍微浪费系统资源。

关于ruby - 在 Ruby 中将二进制文件读取为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/130948/

相关文章:

ruby-on-rails - 如何为特定作业设置 max_run_time?

ruby-on-rails - 为什么使用 gems 来提供 Assets 而不是供应商文件?

c++ - 按特定值按升序对字符串进行排序。我的实现有什么问题?

c++ - 在 C++ 中用字符串连接 const char * 的最干净的方法是什么?

math - 如何从字符串方程解析多项式

java - 在Java中将文本文件读入char数组

ruby - 使用什么在 ruby​​ array/hash/set 中存储版本号列表?

Python file.read() 在文件开头看到垃圾字符

Java - 从文件中读取松散结构的数据

ruby-on-rails - 使用 Stripe for rails 检查充电是否成功