Показать сообщение отдельно
  #2  
Старый 24.11.2010, 20:34
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

прикол в том, что в Дельфи 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);
Ну и поиграться там с типами если будет несовпадение и прочая фигня.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием