force eof on an output stream



someone asked if it's possible to remove the first 300 lines of a file
without ever having two copies of the file or loading the entire thing
into memory.

(with-open-file (in #p"/path/to/bigfile" :direction :input)
(with-open-file (out #p"/path/to/bigfile"
:direction :output
:if-exists :overwrite)
(dotimes (i 300) (read-line in))
(handler-case
(loop (princ (read-line in) out) (terpri out))
(error ()))

would leave the last 300 lines duplicated at the end of the file... Is
it possible to "force" an eof to an output stream? I'm just a pig
farmer and don't know these kind of things...

Nick

.