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

Render an Inline SVG in Rails (or Middleman)

You can avoid multiple requests to your server by rendering SVG images inline to the rest of your HTML.

Feb 11, 2016

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

Dynamic Attributes on Instances in Ruby

Although it's not usually the right choice, when you want to create individual attribute behavior on instances, Ruby has your back.

May 01, 2018