Чтобы расширить ответ Мейсона:
НИКОГДА чтение или запись указателя, точка. Чтобы получить что-то разумное от этого, потребовалась бы большая удача, и в реальном мире, когда вы не просто снова запускаете свою программу, шансы на успех сводятся к бесконечно малому значению до нуля.
Скорее, вам нужно прочитать и написать то, на что указывает указатель.
Также обратите внимание, что любая строка, длина которой не указана в объявлении, является указателем, если вы не работаете в режиме совместимости, который превращает «строку» в «строку [255]» - этот режим существует только для совместимость с очень старым кодом, который был написан, когда это были единственные строки, которые у нас были.
Поскольку вы, кажется, просто пишете все это, нет причин играть в игры с записями фиксированного размера. Просто запишите каждое поле в поток, запишите длину строки перед тем, как написать саму строку, чтобы вы могли загрузить ее обратно правильно. Файл будет меньше и ничего не будет усечено.
Также, как он говорит, используйте tFileStream. В старом формате он используется для файла записей, оставленного на диске, поэтому нет причин использовать его в таком случае.