Nic wiele nie zaszalejesz z BlockRead, dlatego że w przypadku list musisz zapisywać jedynie dane każdego węzła, pomijając pola wskaźnikowe, bo je musisz tworzyć dynamicznie przy odczycie danych z pliku; Poza tym jedyne dane w węźle listy to jedna biedna liczba typu Integer, więc można to dużo szybciej zapisać - jeśli znasz ilość węzłów w liście (jeżeli jest np. opakowana w klasę i w jakimś polu jest przechowywana ich liczba) to można zadeklarować sobie bufor o rozmiarze IlośćWęzłów * SizeOf(Integer)
i dane każdego węzła wpisać do bufora, po czym cały bufor zapisać przez BlockWrite; To samo tylko odwrotnie zrobić przy odczycie;
Poza tym biorąc pod uwagę deklarację rekordu można się spodziewać, że Twoja lista będzie nietypowa, bo w normalnej liście, gdzie każdy węzeł jest tego samego typu, wskaźnik na kolejny węzeł (lub też poprzedni - w przypadku listy dwukierunkowej) wskazują na ten sam typ co struktura, w której znajduje się to pole; U Ciebie struktura jest typu dog
, a wskaźnik na kolejny element już typu features
(hmm... gdzieś już pojawiła się taka nazwa typu);
Żeby cokolwiek można było doradzić musisz podać więcej kodu, tak żeby było wiadomo jak wygląda lista i jak jest budowana w pamięci.