查找压缩文件是文本还是二进制文件而不解压缩

时间:2017-02-09 15:25:05

标签: ruby rubyzip ruby-2.3

我正在创建一个ruby脚本,该脚本经过多个zip文件并验证其中任何xml文件的内容。为了优化我的脚本,我使用ruby-zip gem打开zip文件而不提取它们。

我最初的想法是使用filemagic来确定文件的MIME类型,但filemagic gem采用文件路径,而我所拥有的只是这些入口和InputStream类,这些是ruby-zip独有的。

有没有一种很好的方法来确定文件类型而不提取?最终我需要识别xml文件,但我可以通过识别纯文本文件并使用正则表达式来查找

1 个答案:

答案 0 :(得分:2)

  

filemagic gem采用文件路径

filemagic gem的file方法采用文件路径,但file不是唯一的方法。浏览文档可以看出it has an io method, too

  

我所拥有的是这些Entry和InputStream类,它们是ruby-zip

独有的

我不会说InputStream是“ruby-zip独有的”。来自the docs(强调我的):

  

InputStream继承IOExtras :: AbstractInputStream,以便提供类似IO的界面,以便从单个zip条目中读取

因此FileMagic有一个io方法,Zip :: InputStream就像IO一样。这引出了一个非常直接的解决方案:

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