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

Вниз

Работа с типизизованными файлами   Найти похожие ветки 

 
Evgeniy Efimchenko   (2010-10-20 15:58) [0]

Уважаемые программисты. Вопрос такого рода. Имеется некоторая структура данных, типа:
Type
TTask=record  
TimerInSec:integer;
TimeOf:TTime;
Descript:string[255];
ShutDown:Boolean;
Priority:Boolean;
PriorTime:byte;
StayedTime:TTime;

LanTimer:word;
LanTimeOf:TTime;
LanDescript:string[255];
LanIp:string[25];
LanPriority:Boolean;
LanPriorTime:byte;
LanShutDown:Boolean;
end;

type Toptions=record
Lern:Boolean;
 Alfa:byte;
ColorGam:Tcolor;
topwindow:boolean;
end;

type TProgOpt=record
end;

type TLoadData = class (TObject)
Options:Toptions;
Task:TTask;
ProgOpt:TProgOpt;
end;>


В программе создается экземпляр класса TLoadData, с которым программа и работает. В последствии требуется сохранить эту структуру в типизированный файл. Попытки типа:

procedure SaveFProfile(Profile:TLoadData;Pfile:string); // В Profile передается заполненный экземпляр
var f:file of TLoadData;
begin
AssignFile(F,PFile);
rewrite(f);
write(f,Profile);
closefile(f);
end;>


После попытки загрузки из программы.

procedure LoadFileProfile(Pfile:string;var Profile:TLoadData);
var f:file of TloadData;
begin
AssignFile(F,PFile) ;
reset(f);
Read(f,Profile);
closefile(f);
end;>


Profile оказывается пустым. Пробовал через winAPI результат тот же.

А в общем требуется сохранить все настройки программы не используя реестр и ini файл.


 
Медвежонок Пятачок ©   (2010-10-20 16:02) [1]

осле попытки загрузки из программы.
Profile оказывается пустым.


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


 
Amoeba_   (2010-10-20 16:13) [2]


> После попытки загрузки из программы. Profile оказывается пустым.

А иначе и быть не могло.

> Пробовал через winAPI результат тот же.

Можно было не терять время зря и не пытаться делать бесполезную работу.


> var f:file of TloadData;

Это не файл экземпляров класса, а всего лишь файл указателей, которые по размеру соответствуют Integer. В итоге в файл было записано просто значение указателя (var Profile:TLoadData это всего лишь указатель!), но никак не то, на что он указывает. Так что содержимое объекта таким макаром не сохраняют. Учите матчасть.


 
Amoeba_   (2010-10-20 16:15) [3]


> Попытки типа:
>
> procedure SaveFProfile(Profile:TLoadData;Pfile:string);
> // В Profile передается заполненный экземпляр
> var f:file of TLoadData;
> begin
> AssignFile(F,PFile);
> rewrite(f);
> write(f,Profile);
> closefile(f);
> end;>
>

И длина полученного файла - 4 байта. Угадал?


 
Evgeniy Efimchenko   (2010-10-20 16:27) [4]

Ну да четыре байта.

>Это не файл экземпляров класса, а всего лишь файл указателей, которые по размеру соответствуют Integer. В итоге в файл было записано просто значение указателя (var Profile:TLoadData это всего лишь указатель!), но никак не то, на что он указывает. Так что содержимое объекта таким макаром не сохраняют. Учите матчасть.

А ссылка на статью или еще какой пример имеется?
Проблему то решить не помог никто.

Получается придется все переопределять в record?


 
Amoeba_   (2010-10-20 16:45) [5]

l
> А ссылка на статью или еще какой пример имеется?

Вот статья:
http://rsdn.ru/article/delphi/serialization.xm


 
Amoeba_   (2010-10-20 16:46) [6]

Точнее http://rsdn.ru/article/delphi/serialization.xml


 
Evgeniy Efimchenko   (2010-10-20 16:54) [7]

Вот это по делу, вот за это спасибо!



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

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

Наверх




Память: 0.48 MB
Время: 0.006 c
15-1280383980
Dennis I. Komarov
2010-07-29 10:13
2011.01.16
DM Chess Tournament II


15-1285792164
Юрий
2010-09-30 00:29
2011.01.16
С днем рождения ! 30 сентября 2010 четверг


2-1287647224
mfender
2010-10-21 11:47
2011.01.16
ADODataSet. Ошибка неизвестного типа


2-1288102111
ilsur
2010-10-26 18:08
2011.01.16
Тексты и шрифты


15-1285492613
Lamer@fools.ua
2010-09-26 13:16
2011.01.16