There’s a couple of ways to do this. with-open-file takes care of opening and closing the stream:

(defun file-get-contents (filename)
  (with-open-file (stream filename)
    (let ((contents (make-string (file-length stream))))
      (read-sequence contents stream)
      contents)))

To return the file as a list of lines instead, the loop macro can be used:

(defun file-get-lines (filename)
  (with-open-file (stream filename)
    (loop for line = (read-line stream nil)
          while line
          collect line)))