Форум: "Начинающим";
Текущий архив: 2011.01.16;
Скачать: [xml.tar.bz2];
ВнизРабота с типизизованными файлами Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c