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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.09.2013, 23:35   #1
Des80
Пользователь
 
Регистрация: 09.09.2013
Сообщений: 21
По умолчанию Проблема с типизированными файлами

Я создаю файл типа Tstats.
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
f:file of Tstats;
i:integer;
s:Tstats;
begin
s:=Tstats.Create;
s.AddPm('1',3,'34/55',32,2,54,7,3);
assignfile(f,'D:/13.stats');
rewrite(f);
write(f,s);
closefile(f);
end;
Затем считываю данные из файла
Код:
procedure TForm1.BitBtn2Click(Sender: TObject);
var
f:file of Tstats;
s:Tstats;
begin
s:=Tstats.Create;
assignfile(f,'D:/13.stats');
reset(f);
read(f,s);
closefile(f);
showmessage(s.pm[0].score);
end;
Проблема в том, что все нормально работает когда я файл создаю и читаю, не выключая программу.
Если создать файл, выключить программу, потом включить снова и попытаться его прочитать, то ничего не выйдет и в переменной s типа Tstats будет пусто.

Кто нибудь может помочь мне решить эту проблему?
Вложения
Тип файла: rar тест.rar (332.8 Кб, 4 просмотров)

Последний раз редактировалось Stilet; 10.09.2013 в 08:18.
Des80 вне форума Ответить с цитированием
Старый 09.09.2013, 23:53   #2
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

С каких это пор типизированные файлы работают с классами?
northener вне форума Ответить с цитированием
Старый 09.09.2013, 23:57   #3
Des80
Пользователь
 
Регистрация: 09.09.2013
Сообщений: 21
По умолчанию

цитата из книги фаронова.
Типизированный файл: <имя> = File of <тип>,
где <имя> - имя файлового типа, <тип> - любой тип делфи, кроме файлов
Des80 вне форума Ответить с цитированием
Старый 10.09.2013, 03:13   #4
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от Des80 Посмотреть сообщение
цитата из книги фаронова.
Типизированный файл: <имя> = File of <тип>,
где <имя> - имя файлового типа, <тип> - любой тип делфи, кроме файлов
Не знаю что там пишет Фаронов, но справка по Дельфи пишет иное:
type fileTypeName = file of type

where fileTypeName is any valid identifier and type is a fixed-size type. Pointer types - whether implicit or explicit - are not allowed, so a file cannot contain dynamic arrays, long strings, classes, objects, pointers, variants, other files, or structured types that contain any of these.


Ну а то что у вас "все нормально работает когда я файл создаю и читаю, не выключая программу" легко объяснимо, особенно если посмотреть на размер получаемого вами файла - 4 байта. В файл вы записываете адрес в памяти созданного вами экземпляра класса s:=Tstats.Create;. И пока вы не выйдете из программы этот адрес верный.
northener вне форума Ответить с цитированием
Старый 10.09.2013, 09:07   #5
Des80
Пользователь
 
Регистрация: 09.09.2013
Сообщений: 21
По умолчанию

Понятно, тогда как мне создать файл со сложной структурой? Например я хочу создать свой графический редактор или свой текстовый редактор и мне надо чтобы данные были закодированы определенным образом.

Еще интересует как сделать файл, в котором лежат данные в виде таблицы.
Столбцы и записи можно увеличивать и уменьшать. Подскажите как реализовать это, если типизированые файлы не работают с динамическими массивами и классами?

Последний раз редактировалось Des80; 10.09.2013 в 09:11.
Des80 вне форума Ответить с цитированием
Старый 10.09.2013, 14:39   #6
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
тогда как мне создать файл со сложной структурой?
Для этого есть нетипизированные файлы. Структуру должны разработать вы сами по своим потребностям.
Цитата:
как сделать файл, в котором лежат данные в виде таблицы.
Простейший вариант - CSV файл
northener вне форума Ответить с цитированием
Старый 10.09.2013, 15:53   #7
Des80
Пользователь
 
Регистрация: 09.09.2013
Сообщений: 21
По умолчанию

То есть я могу создать переменую типа File и через Tfilestream заливать данные из объекта Tstats в файл и наоборот, я правильно понимаю?
Des80 вне форума Ответить с цитированием
Старый 10.09.2013, 16:34   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
File и через Tfilestream заливать данные из объекта Tstats в файл и наоборот, я правильно понимаю?
правильно понимаете!
Только Вам нужно будет соблюсти следующие условия:
- писать нужные данные (поля) из TStats в файл "ручками"
- соблюдать правила заполнения файла (структуру), чтобы данные можно было не только записать, но и, потом, прочитать.
Например, при записи строки писать сначала длину строки, потом - собственно символы строки

ну и последнее. Вы вполне можете пользоваться и типизированными файлами.
Опишите нормальную структуру (типа record) с нужными ограничениями (не использовать ссылочные типы данных) и можете писать/читать её одним лёгким движением кода!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.09.2013, 18:01   #9
Des80
Пользователь
 
Регистрация: 09.09.2013
Сообщений: 21
По умолчанию

Это гениально!
Des80 вне форума Ответить с цитированием
Старый 10.09.2013, 21:42   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Des80 Посмотреть сообщение
Это гениально!
это Вы о чём?..
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с типизированными файлами Макс Башкинов Помощь студентам 25 18.01.2013 11:49
Паскаль. Проблема с типизированными файлами:( Женька Good Помощь студентам 5 07.12.2011 23:41
Pascal. Проблема с типизированными файлами Женька Good Помощь студентам 2 29.11.2011 22:13
Работа с типизированными файлами Zalmancheg Помощь студентам 2 11.03.2011 23:15
Проблема с типизированными файлами Siluet Общие вопросы Delphi 1 04.10.2009 14:08