# File lib/mongo/gridfs/grid_file_system.rb, line 103
    def open(filename, mode, opts={})
      opts = opts.dup
      opts.merge!(default_grid_io_opts(filename))
      if mode == 'w'
        versions = opts.delete(:versions)
        if opts.delete(:delete_old) || (versions && versions < 1)
          versions = 1
        end
      end
      file = GridIO.new(@files, @chunks, filename, mode, opts)
      return file unless block_given?
      result = nil
      begin
        result = yield file
      ensure
        id = file.close
        if versions
          self.delete do
            @files.find({'filename' => filename, '_id' => {'$ne' => id}}, :fields => ['_id'], :sort => ['uploadDate', -1], :skip => (versions - 1))
          end
        end
      end
      result
    end