在不解压缩的情况下查找压缩文件是文本文件还是二进制文件
find whether a zipped file is text or binary without unzipping it
我正在创建一个 ruby 脚本,它遍历多个 zip 文件并验证其中任何 xml 文件的内容。为了优化我的脚本,我使用 ruby-zip gem 打开 zip 文件而不解压缩它们。
我最初的想法是使用 filemagic 来确定文件的 MIME 类型,但是 filemagic gem 需要一个文件路径,而我只有这些 Entry 和 InputStream 类 ruby-zip.
独有
有什么不用解压就能判断文件类型的好方法吗?最终我需要识别 xml 个文件,但我可以通过识别纯文本文件并使用正则表达式来查找
the filemagic gem takes a file path
filemagic gem 的 file
方法采用文件路径,但 file
不是它拥有的唯一方法。看一眼文档就会发现 it has an io
method, too.
all I have are these Entry and InputStream classes which are unique to ruby-zip
我不会说 InputStream 是 "unique to ruby-zip." 来自 the docs(强调我的):
A InputStream inherits IOExtras::AbstractInputStream in order to provide an IO-like interface for reading from a single zip entry
所以 FileMagic 有一个 io
方法并且 Zip::InputStream 是 IO-like。这使我们找到了一个非常简单的解决方案:
require 'filemagic'
require 'zip'
Zip::InputStream.open('/path/to/file.zip') do |io|
entry = io.get_next_entry
FileMagic.open(:mime) do |fm|
p fm.io(entry.get_input_stream)
end
end
我正在创建一个 ruby 脚本,它遍历多个 zip 文件并验证其中任何 xml 文件的内容。为了优化我的脚本,我使用 ruby-zip gem 打开 zip 文件而不解压缩它们。
我最初的想法是使用 filemagic 来确定文件的 MIME 类型,但是 filemagic gem 需要一个文件路径,而我只有这些 Entry 和 InputStream 类 ruby-zip.
独有有什么不用解压就能判断文件类型的好方法吗?最终我需要识别 xml 个文件,但我可以通过识别纯文本文件并使用正则表达式来查找
the filemagic gem takes a file path
filemagic gem 的 file
方法采用文件路径,但 file
不是它拥有的唯一方法。看一眼文档就会发现 it has an io
method, too.
all I have are these Entry and InputStream classes which are unique to ruby-zip
我不会说 InputStream 是 "unique to ruby-zip." 来自 the docs(强调我的):
A InputStream inherits IOExtras::AbstractInputStream in order to provide an IO-like interface for reading from a single zip entry
所以 FileMagic 有一个 io
方法并且 Zip::InputStream 是 IO-like。这使我们找到了一个非常简单的解决方案:
require 'filemagic'
require 'zip'
Zip::InputStream.open('/path/to/file.zip') do |io|
entry = io.get_next_entry
FileMagic.open(:mime) do |fm|
p fm.io(entry.get_input_stream)
end
end