![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с типизизованными файлами [D7]
Evgeniy Efimchenko © (2010-10-20 15:58:00)Уважаемые программисты. Вопрос такого рода. Имеется некоторая структура данных, типа:
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 файл.
Evgeniy Efimchenko (2010-10-20 16:54:00) [1]Вот это по делу, вот за это спасибо!
Amoeba_ (2010-10-20 16:46:00) [2]Точнее http://rsdn.ru/article/delphi/serialization.xml
Amoeba_ (2010-10-20 16:45:00) [3]l
> А ссылка на статью или еще какой пример имеется?
Вот статья:
http://rsdn.ru/article/delphi/serialization.xm
Evgeniy Efimchenko (2010-10-20 16:27:00) [4]Ну да четыре байта.
>Это не файл экземпляров класса, а всего лишь файл указателей, которые по размеру соответствуют Integer. В итоге в файл было записано просто значение указателя (var Profile:TLoadData это всего лишь указатель!), но никак не то, на что он указывает. Так что содержимое объекта таким макаром не сохраняют. Учите матчасть.
А ссылка на статью или еще какой пример имеется?
Проблему то решить не помог никто.
Получается придется все переопределять вrecord?
Amoeba_ (2010-10-20 16:15:00) [5]
> Попытки типа:
>
> 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 байта. Угадал?
Amoeba_ (2010-10-20 16:13:00) [6]
> После попытки загрузки из программы. Profile оказывается пустым.
А иначе и быть не могло.
> Пробовал через winAPI результат тот же.
Можно было не терять время зря и не пытаться делать бесполезную работу.
> var f:file of TloadData;
Это не файл экземпляров класса, а всего лишь файл указателей, которые по размеру соответствуют Integer. В итоге в файл было записано просто значение указателя (var Profile:TLoadData это всего лишь указатель!), но никак не то, на что он указывает. Так что содержимое объекта таким макаром не сохраняют. Учите матчасть.
Медвежонок Пятачок (2010-10-20 16:02:00) [7]осле попытки загрузки из программы.
Profile оказывается пустым.
Ты в свой чудесный файл пробовал заглядывать?
После чудесного сохранения всех данных.