Ruby: How to determine if file being read is binary or text

前端 未结 3 1850
广开言路
广开言路 2021-02-06 08:42

I am writing a program in Ruby which will search for strings in text files within a directory - similar to Grep.

I don\'t want it to attempt to search in binary files bu

3条回答
  •  傲寒
    傲寒 (楼主)
    2021-02-06 08:53

    libmagic is a library which detects filetypes. For this solution I assume, that all mimetype's which start with text/ represent text files. Eveything else is a binary file. This assumption is not correct for all mime types (eg. application/x-latex, application/json), but libmagic detect's these as text/plain.

    require "filemagic"
    
    def binary?(filename)
      begin
        fm= FileMagic.new(FileMagic::MAGIC_MIME)
        !(fm.file(filename)=~ /^text\//)
      ensure
        fm.close
      end
    end
    

提交回复
热议问题