Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.28;
Скачать: CL | DM;

Вниз

Типизированный файл странно читается   Найти похожие ветки 

 
Light-blr   (2007-10-04 14:24) [0]

Здравствуйте!
У меня две программы - одна составляет уровни для игры и записывает в типизированный файл, а другая позволяет открыть записанные уровни и играть. В обеих программах объявлены одинаковые типы и одинаковое открытие и чтение файла. Так вот, программа-редактор уровней, которая создаёт этот файл, отлично его читает. А программа-игра при попытке прочесть выдаёт какие-то странные значения.

Вот типы:

TTable=array[0..TableHei+1,0..TableWid+1]of shortint;
TLevel=record
       TableW:shortint;
       TableH:shortint;
       NeedSteps:integer;
       FreeSeconds:integer;
       Table:TTable;
       end;

Вот переменные:

Levels:array[1..50]of TLevel;
f:file of TLevel;

Вот сохранение:

  AssignFile(f,SaveDialog1.FileName);
  rewrite(f);
  for i:=1 to LevelCount-1 do
     Write(f,levels[i]);
  closefile(f);
  end;

Вот открытие в программе-редакторе:

  If OpenDialog1.Execute then  begin
     AssignFile(f,OpenDialog1.FileName);
     Reset(f);
     LevelCount:=FileSize(f);
     for i:=1 to LevelCount do
        Read(f,Levels[i]);
     inc(LevelCount);end;

Вот открытие в программе-игре:

AssignFile(f,"D:\temp\levels.dat");
Reset(f);
CountOfLevels:=FileSize(f);
for i:=1 to CountOfLevels do
  Read(f,levels[i]);

и здесь CountOfLevels странным образом оказывается равным 78, в то время как в программе-редакторе, как и должно быть, FileSize возвращает значение 20. Ну и дальше вся таблица Table тоже плывёт - значения читаются неправильно.

Скажите, что сделать, чтобы правильно прочитать этот файл?


 
Anatoly Podgoretsky ©   (2007-10-04 14:28) [1]

> Light-blr  (04.10.2007 14:24:00)  [0]

Странно, как это ты умудрился записать в файл указатель на объект и какова великая цель?
А так ты видимо ничего не знаешь про выравнивания полей в записи.


 
Инс ©   (2007-10-04 14:29) [2]


> Странно, как это ты умудрился записать в файл указатель
> на объект и какова великая цель?

Это массив shortint-ов у него так называется. Я тоже сначала так подумал...


 
Инс ©   (2007-10-04 14:31) [3]


> Light-blr   (04.10.07 14:24)

Объявите вместо array и record соответственно packed array и packed record, может поможет


 
Light-blr   (2007-10-04 14:38) [4]

Странным образом помогло... Спасибо огромное!


 
Anatoly Podgoretsky ©   (2007-10-04 14:43) [5]


> Это массив shortint-ов у него так называется. Я тоже сначала
> так подумал...

Мастер запутывания.


 
Amoeba ©   (2007-10-04 19:31) [6]


> packed array

Массивы и так по умолчанию packed.



Страницы: 1 вся ветка

Текущий архив: 2007.10.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.023 c
11-1175237504
Trible
2007-03-30 10:51
2007.10.28
PaintBox и GRushPanel


15-1191605733
DillerXX
2007-10-05 21:35
2007.10.28
Кто знаком с синтаксисом шелла Windows


2-1191432426
artkil
2007-10-03 21:27
2007.10.28
Строки TListView


1-1186031887
Раф
2007-08-02 09:18
2007.10.28
Как в чужом приложение на MessageDlg нажать Да


2-1191770141
Alex-r
2007-10-07 19:15
2007.10.28
Как заархивировать несколько файлов в один архив?