Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.09.12;
Скачать: [xml.tar.bz2];

Вниз

Запись динамического массива в файл   Найти похожие ветки 

 
Злой!!!   (2002-08-30 12:15) [0]

Господа мастера! Подскажите как записать динамический массив объектов в файл, а то у меня вместо значений, в файл записываются указатели. Я объявляю:

smeta: array of TSmeta;
smFile: file of TSmeta;


TSmeta - это класс. При записи пишу:

for i:=0 to High(Smeta) do
begin
write(smFile,smeta[i]);
end;


Спасибо.


 
Smithson   (2002-08-30 12:25) [1]

Попробуй, когда открываешь файл - Reset(smFile, [b]1[/b]);


 
Виктор Щербаков   (2002-08-30 12:30) [2]

Smithson © (30.08.02 12:25)
Дело не в этом. array of TSmeta - это массив указателей на экземпляры класса TSmeta.


 
Skier   (2002-08-30 12:32) [3]

>Злой!!!
Я так понял что тебе нужно записать свойства
объектов в файл. Для этого ты сначала посмотри, как
в Delphi организованы классы TReader и TWriter - очень
поучительно, знаешь ли...


 
Opuhshii   (2002-08-30 12:46) [4]

мда,.. ну и что?,..

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.

тут я вижу два варианта,. либо ваша TSmeta = class(TComponent)..,
там есть imho SaveToStream для published (D6 под рукой нет,.. но такое кажеться было,... !!! (не факт)),,.
либо... либо ручками,..



 
Iliaser   (2002-08-30 12:47) [5]


write(smFile,smeta[i]);


Записывает в файл кусок памяти расположенный по адресу
@smeta[i] размером в sizeof(TSmeta) байт. Следовательно
если в структуре у тебя есть поле указатель на что либо
то в файл будет записано значение этого указателя а не
данные на которые этот указатель указывает.


 
PVOzerski   (2002-08-30 13:57) [6]

либо переделать tSmeta из class в object, взять из OWL от BP tFileStream, подправить его для 32-разрядности (предупреждаю: работа огромная) и работать через него, либо писать тем или иным способом интересующие вас поля отдельно. Во 2-м случае могу порекомендовать собрать эти поля (для property это не подойдет) в одно поле-record. А еще в модуле Classes есть функции ReadComponentResFile и WriteComponentResFile для классов-наследников tComponent. Я их не пробовал, но предполагаю, что если tSmeta сделать компонентом, то они могут оказаться тем, что надо.


 
Skier   (2002-08-30 14:01) [7]

>PVOzerski

> что если tSmeta сделать компонентом

А это зачем ?


 
PVOzerski   (2002-08-30 15:33) [8]

>> что если tSmeta сделать компонентом
Да просто Help почитал, а там описалово на функции такое:
WriteComponentResFile procedure
Writes components and their properties to a file using a Windows resource file format.
procedure WriteComponentResFile(const FileName: string; Instance: TComponent);
ReadComponentResFile function
Reads components and their properties from a specified Windows resource file.
function ReadComponentResFile(const FileName: string; Instance: TComponent): TComponent;

Вроде бы то, что надо, но параметр Instance должен быть совместим с tComponent. Из чего совершенно не следует, что его надо инсталлировать, регистрировать и т.п.


 
Skier   (2002-08-30 15:40) [9]

>PVOzerski
Ага. Значит я тебя не понял я то думал что ты
под фразой "tSmeta сделать компонентом" имел ввиду как раз
инсталлирование, регистрирацию и т.п.

IMHO, автору вопроса нужно сделать свою tSmeta потомком tComponent и опубликовать необходимые свойства. И будет ему счастье :))



 
Злой!!!   (2002-08-30 16:20) [10]

Всем, спасибо, работает - по совету Opuhshii записываю свойства ручками... К сожалению остальные способы мне пока непонятны :(



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

Форум: "Основная";
Текущий архив: 2002.09.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
14-35909
Lady
2002-08-16 20:19
2002.09.12
???


3-35619
kest2
2002-08-22 11:25
2002.09.12
Oшибка!?


1-35673
Dimk
2002-08-31 21:45
2002.09.12
Почему если из витка ( thread ) создать фору - выдается сообщение


7-35931
SGrigory
2002-04-29 15:38
2002.09.12
Как скрыть приложение от Ctrl-Alt-Del в NT (XP)


3-35591
Юра
2002-08-22 13:07
2002.09.12
вторичные составные индексы при Master-Detail в Paradox





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский