прикол в том, что в Дельфи String - это указатель на строку. И занимает он 4 байта.
А BlockRead'у пофигу - он копирует данные из файла в оперативку. Получается, что в String лежит какой-то левый адрес.
При записи надо так:
Код:
t:=sizeof(char)*Length(info.name); //CHAR в случае, если String, и AnsiChar для AnsiString
BlockWrite(f,t,4);
BlockWrite(f,pointer(info.name)^,t);
как-то так.
При чтении соответственно примерно так:
Код:
BlockRead(f,t,4);
SetLength(s,t);
BlockRead(f,pointer(s)^,t);
Ну и поиграться там с типами если будет несовпадение и прочая фигня.