Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
29 / 58 / 6
Регистрация: 10.01.2011
Сообщений: 1,231
1

Не записывается объект в файл

28.03.2013, 16:11. Показов 1003. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! У меня имеются клаcсы:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
type 
      ClassA = class
      private
               field1:integer;
               field2:integer;
      public
              procedure fun1(i:integer);
              constructor Create(s1,s2:string);
      end;
      ClassB = class
      private
               field1:integer;
               field2:integer;
      public
              procedure fun1(i:integer);
              constructor Create;overload;
      end;
 
сама реализация
constructor ClassA.Create(s1,s2:string);
begin
field1:=s1;
field2:=s2;
end;
...................
constructor ClassB.Create;
var
    ClassA1:ClassA;
begin
ClassA1:=ClassA.Create('fdsfs','fdsfsf');
FileWrite(hFile,ClassA1,sizeof(ClassA));//hFile это глобальный ранее полученный
end;
в конструкторе классаб я пытаюсь записать обьект но не получается. В файле что то появляется, но я не вижу там значения 'fdsfs' 'fdsfsf. Подскажите, что я делаю не правильно. Файл прям тут же я пробывал создавать но эффект был тот же самый. А так файл был открыт ранее и хэндл получен
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.03.2013, 16:11
Ответы с готовыми решениями:

Результат теста не записывается в файл
f:textfile; n:string; s:integer; begin if (n='1') then begin s:=2; {1}if...

Имя введенное в едит не записывается в файл
помогите пожалуйста с делфи. нужно создать файл в который будет вводится текст который введен с...

В dat файл записывается всего одна запись
У меня в этот файл записывается всего одна запись когда записываешь второй раз запись заменяется на...

Не записывается в текстовый файл информация, ошибок компилятор не выдает
Здравствуйте, нужно записать текущую дату компьютера в текстовый файл. var MyFile: TextFile; ...

8
angstrom
28.03.2013, 16:16 2
Delphi
1
2
3
4
5
6
7
8
9
10
11
type 
      ClassA = class
      private
               field1:integer;
               field2:integer;
...
constructor ClassA.Create(s1,s2:string);
begin
field1:=s1;
field2:=s2;
end;
Это как? В Integer пытаться присвоить String?
132 / 129 / 31
Регистрация: 12.12.2011
Сообщений: 462
28.03.2013, 16:30 3
1) Field1/Field2 при описании имеют тип Integer. А в конструкторе String...

2)sizeof(ClassA) =4 байта. Это Pointer.

3)В файл невозможно будет записать процедуры и функции класса, поэтому запись
Delphi
1
FileWrite(hFile,ClassA1,sizeof(ClassA));
смысла не имеет. Нужно писать процедуру чтения/записи данных класса в файл. При чтении придется заново создавать экземпляры класса.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
28.03.2013, 16:38 4
Унаследуйся не от TObject, а от TPersistent, а еще лучше от TComponent - львиную долю работы по автоматической сериализации/десериализации Делфи сделает за тебя сама без дополнительных с твоей стороны телодвижений.
1
29 / 58 / 6
Регистрация: 10.01.2011
Сообщений: 1,231
28.03.2013, 19:19  [ТС] 5
Цитата Сообщение от angstrom Посмотреть сообщение
Это как? В Integer пытаться присвоить String?
Цитата Сообщение от Vabos Посмотреть сообщение
Field1/Field2 при описании имеют тип Integer. А в конструкторе String...
я так то не копировал программу а на память писал, смысл же не в этом, а в том что объект не записывается в файл.
Цитата Сообщение от mss Посмотреть сообщение
Унаследуйся не от TObject, а от TPersistent, а еще лучше от TComponent - львиную долю работы по автоматической сериализации/десериализации Делфи сделает за тебя сама без дополнительных с твоей стороны телодвижений.
Тоесть все оставить как было, унаследовать и запишется?
Цитата Сообщение от Vabos Посмотреть сообщение
2)sizeof(ClassA) =4 байта. Это Pointer.
Надо так что ли писать sizeof(ClassA1)? И вообще можно ли обьекты с данными записывать в файл?
Цитата Сообщение от Vabos Посмотреть сообщение
Нужно писать процедуру чтения/записи данных класса в файл.
Просто видишь в чем дело, нужно читать обязаетльно FileReadом, а если записывать стринги в файл, то я представления не имею как считать все будет. Я тему поэтому вопросу завдавал, сошелся на решении легче научиться обьекты записывать))

Добавлено через 54 секунды
И еще ошибок нет,все компилится хорошо просто не записывается в файл обьект
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
28.03.2013, 20:16 6
Цитата Сообщение от Helldrg Посмотреть сообщение
Тоесть все оставить как было, унаследовать и запишется?
Нет.
Просто даже кролики не плодятся - нужно проштудировать учебник.
0
29 / 58 / 6
Регистрация: 10.01.2011
Сообщений: 1,231
28.03.2013, 20:37  [ТС] 7
Цитата Сообщение от mss Посмотреть сообщение
нужно проштудировать учебник.
а ну да еще и погуглить....
0
132 / 129 / 31
Регистрация: 12.12.2011
Сообщений: 462
29.03.2013, 13:38 8
Переменная класса это указатель на структуру данных, а не сами данные. Когда ты пишешь SizeOf(ClassA) ты получаешь 4 байта, потому, что это указатель (Pointer). Посмотри, что будет в результате:
Delphi
1
I:=SizeOf(Pointer)-SizeOf(ClassA);
В результате получим ноль, так как это одно и то же.

Что касается процедуры записи чтения, то тут я не понял, при чем здесь "стринги". Как будто кроме текстовых файлов больше ничего нет... Вот пример записи/чтения двух массивов разных типов в файл:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
type
 
    TSubstation=record
       SerialNo:Integer; //Порядковый номер
       Number:Integer;   //Номер
       Location:TPoint;  //Координаты Подстанции
       Base:boolean;     //Признак дислокации ОВБ
       Checked:boolean;  //Признак выбора
       Name:String[255]; //Название
    end;
 
    TSubstationMas = array of TSubstation; //Массив подстанций
 
    TKymas = array of array of Double; //Массив коэффициентов удлинения трассы
//----
procedure ReadDataFromFile(FileName:String; var S:TSubstationMas; var Ky:TKyMas);
var FS:TFileStream;
    i,j,n:Integer;
begin
   SetLength(S,0);
   FS:=TFileStream.Create(FileName, fmOpenRead);
   FS.Read(n,SizeOf(Integer));
   for i:=0 to n-1 do
   begin
      SetLength(S,Length(S)+1);
      FS.Read(S[Length(S)-1], SizeOf(TSubstation));
   end;
 
   //массив Ку
   FS.Read(n,SizeOf(Integer));
   SetLength(Ky,n,n);
   for i:=0 to n-1 do
   begin
      for j:=0 to n-1 do
      begin
         FS.Read(Ky[i,j], SizeOf(Double));
      end;
   end;
   FreeAndNil(FS);
end;
 
procedure WriteDataToFile(FileName:String; S:TSubstationMas; Ky:TKyMas);
var FS:TFileStream;
    i,j,n:integer;
begin
   n:=Length(S);
   FS:=TFileStream.Create(FileName, fmCreate);
   FS.Write(n, SizeOf(Integer));
   for i:=0 to Length(S)-1 do
   begin
      FS.Write(S[i], SizeOf(TSubstation));
   end;
 
   //Ky
   n:=Length(Ky);
   FS.Write(n, SizeOf(Integer));
   for i:=0 to Length(Ky)-1 do
   begin
      for j:=0 to Length(Ky)-1 do
      begin
         FS.Write(Ky[i,j], SizeOf(Double));
      end;
   end;
 
   FreeAndNil(FS);
end;
С данными класса все то же самое. Написать-то надо всего две функции Read и Write. Так что не знаю, чем тебе еще помочь...
1
29 / 58 / 6
Регистрация: 10.01.2011
Сообщений: 1,231
29.03.2013, 21:16  [ТС] 9
Спасибо за помощь!!! Просто интересно как с помощи функций FileWrite записывать и FileRead читать
у меня даже так не записывается:
Delphi
1
2
s:='fsdfsdfsd';
FileWrite(hFile,s,lenght(s));
0
29.03.2013, 21:16
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.03.2013, 21:16
Помогаю со студенческими работами здесь

В переменную не записывается объект
Подскажите пожалуйста, что не так? Код перепечатать к сожалению нет возможности

Не записывается объект класса
Задача состоит в том чтобы записать данные объекта в файл, а потом вывести их. friend ...

Записывается ли в объект класса данные при моей реализации?
Хочу спросить: записываются ли данные при вводе в объект класса? Или это записывается лишь в метод...

При записи в файл, в какую папку записывается файл?
При записи текста в файл в какой папке создается файл и туда записываются данные, записываю так:...

Не записывается в файл
Помогите отладить чтобы всё работало. в модуле заданы функции задаём интервалы a и b(границы по...

Не записывается в файл
static string myTxt = @"C:\ForCourseWork\myTxt.txt"; static FileStream FS = new FileStream(myTxt,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Как подключить JavaScript файл в другом JavaScript файле
InfoMaster 20.01.2025
В современной веб-разработке организация кодовой базы играет ключевую роль в создании масштабируемых и поддерживаемых приложений. Модульность и правильное структурирование кода стали неотъемлемыми. . .
Как откатить изменения в исходниках, не внесенные в Git
InfoMaster 20.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с необходимостью отменить внесенные изменения в исходном коде. Особенно актуальной становится ситуация, когда изменения еще. . .
В чем разница между px, in, mm, pt, dip, dp, sp
InfoMaster 20.01.2025
В мире цифрового дизайна и разработки интерфейсов правильный выбор единиц измерения играет ключевую роль в создании качественного пользовательского опыта. История развития систем измерений для. . .
Как изменить адрес удалённого репозитория (origin) в Git
InfoMaster 20.01.2025
В терминологии Git термин origin является стандартным именем для основного удаленного репозитория, с которым взаимодействует локальная копия проекта. Когда разработчик клонирует репозиторий с. . .
Как переместить последние коммиты в новую ветку (branch) в Git
InfoMaster 20.01.2025
При работе над проектом часто возникают ситуации, когда необходимо изолировать определенные изменения от основной линии разработки. Это может быть связано с экспериментальными функциями, исправлением. . .
Как вернуть результат из асинхронной функции в JavaScript
InfoMaster 20.01.2025
Асинхронное программирование представляет собой фундаментальную концепцию в JavaScript, которая позволяет выполнять длительные операции без блокировки основного потока выполнения программы. В. . .
Какой локальный веб-сервер выбрать
InfoMaster 19.01.2025
В современной веб-разработке локальные веб-серверы играют ключевую роль, предоставляя разработчикам надежную среду для создания, тестирования и отладки веб-приложений без необходимости использования. . .
Почему планшеты и iPad уже не так популярны, как раньше
InfoMaster 19.01.2025
Эра революционных инноваций История планшетов началась задолго до того, как эти устройства стали привычными спутниками нашей повседневной жизни. В начале 1990-х годов появились первые прототипы,. . .
Как самому прошить BIOS ноутбука
InfoMaster 19.01.2025
BIOS (Basic Input/ Output System) представляет собой важнейший компонент любого компьютера или ноутбука, который обеспечивает базовое взаимодействие между аппаратным и программным обеспечением. . .
Какой Linux выбрать для домашнего компьютера
InfoMaster 19.01.2025
Современные реалии выбора операционной системы В современном мире выбор операционной системы для домашнего компьютера становится все более важным решением, которое может существенно повлиять на. . .
Как объединить два словаря одним выражением в Python
InfoMaster 19.01.2025
В мире программирования на Python работа со словарями является неотъемлемой частью разработки. Словари представляют собой мощный инструмент для хранения и обработки данных в формате "ключ-значение". . . .
Как без исключения проверить существование файла в Python
InfoMaster 19.01.2025
При разработке программного обеспечения на Python часто возникает необходимость проверить существование файла перед выполнением операций с ним. Это критически важная задача, которая помогает избежать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru