Ruby:如何确定正在读取的文件是二进制还是文本

Xan*_*las 7 ruby file-io

我正在用Ruby编写一个程序,它将在目录中的文本文件中搜索字符串 - 类似于Grep.

我不希望它尝试搜索二进制文件,但我无法在Ruby中找到确定文件是二进制文件还是文本的方法.

该程序需要在Windows和Linux上运行.

如果有人能指出我正确的方向,这将是伟大的.

谢谢,

Xanthalas

joh*_*nes 13

libmagic是一个检测文件类型的库.对于这个解决方案,我假设,所有以mimetype开头的text/代表文本文件.Eveything else是一个二进制文件.这个假设对于所有mime类型都不正确(例如,application/x-latex,application/json),但是libmagic检测这些是text/plain.

require "filemagic"

def binary?(filename)
  begin
    fm= FileMagic.new(FileMagic::MAGIC_MIME)
    !(fm.file(filename)=~ /^text\//)
  ensure
    fm.close
  end
end
Run Code Online (Sandbox Code Playgroud)


小智 5

gem install ptools
require 'ptools'
File.binary?(file)
Run Code Online (Sandbox Code Playgroud)

  • ptools方法将用非拉丁字符(中文等)编写的UTF-8文本文件识别为"二进制".正如@puchu所说,使用mime类型代替. (4认同)