Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2009, 20:27   #1
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию Проблема с чтением типизированного файла.

Сейчас пытаюсь разобраться с типизированными файлами, и сделал для себя программу, которая записывает и читает данные из файла(верхнее поле ввода под текст, нижнее под цифры).

Проблема в том, что если в программе занести в поля данные, сохранить их и не выходя из программы загрузить, то все нормально, но если сохранить данные и выйти из программы, то они уже не загружаются.
Помогите разобраться в чем дело.
Вадим Буренков вне форума Ответить с цитированием
Старый 27.05.2009, 20:33   #2
beemoto
Форумчанин
 
Аватар для beemoto
 
Регистрация: 11.04.2009
Сообщений: 277
По умолчанию

Вадим Буренков, может покажите как вы делаете или мы екстрасенсы!?
как я понял серез инифайл
beemoto вне форума Ответить с цитированием
Старый 27.05.2009, 20:35   #3
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
Смех

Упс, я забыл файл прикрепить
Вложения
Тип файла: rar Files.rar (163.6 Кб, 24 просмотров)
Вадим Буренков вне форума Ответить с цитированием
Старый 27.05.2009, 20:58   #4
beemoto
Форумчанин
 
Аватар для beemoto
 
Регистрация: 11.04.2009
Сообщений: 277
По умолчанию

Вадим Буренков, а не легче ли для этого использовать инифайл!?
beemoto вне форума Ответить с цитированием
Старый 27.05.2009, 21:12   #5
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Нет. Дело в том, что это просто тест. В реальной программе(игре) файл должен использоваться для хранения множества параметров уровня и игровых обьектов.
Я умею работать с ini и знаю что тут он не подойдет.Мне нужно разобраться с типизированными файлами. Ты не знаешь в чем дело?
Вадим Буренков вне форума Ответить с цитированием
Старый 27.05.2009, 21:46   #6
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Подправил Ваш исходник: File.rar
Теперь всё работает.
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 28.05.2009, 11:54   #7
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

А можно сделать так, чтобы в типизированный файл записывались данные и record'a, и class'a?

Код:
Type
TTestClass = class
ClassNumber:integer;
end;


TInform = record
Texts: String[100];
Number: Integer;
Test:TTestClass;
End;
Я хочу чтобы также записывались данные TTestClass, который в TInform. Это реально?
Вадим Буренков вне форума Ответить с цитированием
Старый 28.05.2009, 12:31   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
файл записывались данные и record'a,
Запросто. Обьяви тип файла File of TInform
Тогда Write(f,r) где r - имеет тип TInform пихнет в файл все что в этой записи.
Цитата:
и class'a?
Скажем так пугать не хочу но советую про это забыть...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.05.2009, 13:31   #9
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Кстати записать класс в файл можно и все будет работать, правдо это действительно какое то извращение будет. Но как говорят и можно то чего нельзя когда уж очень хочется.
Код:
Type
//TInform = Record
TInform = class
  Texts: String[100];
  Number: Integer;
End;

var
  Form1: TForm1;
  Inf: tinform;
  F: File Of TInform;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
reset(f);
//read(f,Inf);
inf:=TINform.Create;
BlockRead(f ,pointer(cardinal(inf) + sizeof(pointer))^, inf.InstanceSize - 4);
closeFile(f);
Form1.Edit1.Text:=Inf.Texts;
Form1.Edit2.Text:=IntToStr(Inf.Number);
inf.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
rewrite(f);

inf:=TINform.Create;
Inf.Texts:=Form1.Edit1.Text;
Inf.Number:=StrToInt(Form1.Edit2.Text);
BlockWrite(f, pointer(cardinal(inf) + sizeof(pointer))^, inf.InstanceSize - 4);
//write(f,Inf);
closeFile(f);
inf.Free;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Form1.Edit1.Text:='';
Form1.Edit2.Text:='';
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 AssignFile(f,'C:\Test.bin');
end;
Проблема состоит в том, что первые 4 байта содержат метакласс и они разные при каждой компиляции, смысла нет сохранять в файл. Поэтому и записываем
Код:
inf.InstanceSize - 4
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с чтением из файла Tesmont Общие вопросы C/C++ 0 20.05.2009 19:39
C++: проблема с чтением строки ф-ей ReadConsole() Retiz Помощь студентам 2 18.09.2008 21:32
Вывести информацию из типизированного файла в combobox... tacer Помощь студентам 1 04.12.2007 11:46