Das liegt daran, dass FindFirst auch schon einen Dateinamen zurückliefert, du diese aber erst an dem ersten Aufruf von FindNext (der sinnigerweise schon den zweiten Dateinamen liefert) verwendest. Du müsstest also nach dem Aufruf von FindFirst schonmal output.Add() machen.
Zusätzlich wird meiner Meinung nach der Ordner '.' vor der Rekursion nicht geprüft - das wiederum hängt mit der fehlenden Reaktion auf das FindFirst zusammen.
Außerdem liefert der (von dir kopierte?) Code nicht alle Dateien in einem Verzeichnis, sondern auch die in den entsprechenden Unterverzeichnissen.
Btw: Eigentlich gibt es hier im Forum eine "Neue Frage - neuer Thread"-Philosophie.
//Edit: letzter Kommentar hat sich somit erledigt
_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist überzeugt, dass er genug davon habe.
(René Descartes)