Home

Check if a File is Binary or Text in Ruby

Here's a cool little trick to determining if a file is text or binary in Ruby just by using the path to that file.

Sometimes when you want to read a file in Ruby you need to know whether that file is binary or text, to help you avoid some unwelcome errors.

We can accomplish this by using a gem called ruby-filemagic. We're going to look at the MIME type of the file, and if it's not text, then we'll assume it's binary. We can do something like this:

require 'filemagic'

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

def binary?(filename)
!text?
end

Then you can run:

> text?("/path/to/my/file.png")
# => false

In addition, since you're typically going to be working with the path of the file (as a string), we could extend the String class to make this a little prettier to write. However, you might want to get more specific with your method naming.

require 'filemagic'

class String

def text_file?
begin
fm = FileMagic.new(FileMagic::MAGIC_MIME)
fm.file(self) =~ /^text\//
ensure
fm.close
end
end

def binary_file?
!text?
end

end

Then you can run this instead:

> "/path/to/my/file.png".text_file?
# => false

> "/path/to/my/file.png".binary_file?
# => true

References:

Let's Connect

Keep Reading

Don't Overthink Slugs in Ruby/Rails

It can take some tricky logic to transform unpredictable characters into a URL-friendly string. But with Rails, you don't need to worry about.

Jul 11, 2018

Scrape and Parse A Webpage with Ruby (using Nokogiri)

A quick way to pull content from a URL and parse it using Ruby.

Feb 23, 2016

Dynamic Pages in Middleman using Contentful

How to configure and use the Contentful Middleman gem to generate pages in Middleman driven by a content management system.

May 06, 2018