Nach der Zeile:
inc(i);
Ist i eins.
Hier
readln(xdatei,daten.datei[i].name);
willst du aber auf das 0'te Element zugreifen nur da steht nichts drinne.
Und so was:
repeat inc(i); readln(xdatei); until eof(xdatei);
Macht man nicht, weil sich das so gut wie gar nicht zeilenweise debuggen läßt.
Dann fällt mir noch das auf:
Delphi-Quellcode:
SetLength(daten.datei,i+1);
for n := 0 to i do
Auch das ist ungewöhnlich. Normalerweise läßt man ein 0 basierdendes Array von 0 bis Anzahlelement-1 laufen.