Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запись структуры в файл


mr.Spok ©   (2005-06-05 14:46:00) 

Есть такая структура:
type PGeoFile = ^GeoFile;
    GeoFile = record
              ItemName:string[30];
              ItemFunction:string[30];
              ItemDescription:string[30];
              end;
На форме есть компонент TreeView. Требуется записать его некоторые параметры в файл:

procedure TForm1.ButtonWriteClick(Sender: TObject);
var   i:integer;   f : file of PGeoFile;  ptr:PGeoFile;
begin
 New(ptr);
 AssignFile(f,FileName);
 Rewrite(f);
 for i:=0 to TreeView.Items.Count-1 do
   begin
     ptr^.ItemName := TreeView.Items.Item[i].Text;
     ptr^.ItemFunction := '';
     ptr^.ItemDescription := '';
     Write(f,ptr);
   end;
 Dispose(ptr);
 CloseFile(f);
end;

...и считать из файла:

procedure TForm1.ButtonReadClick(Sender: TObject);
var   i:integer;   f : file of PGeoFile; ptr:PGeoFile;
begin
 New(ptr);
 AssignFile(f,FileName);
 Reset(f);
 while not EOF(f) do
   begin
     Read(f,ptr);
     TreeView.Items.Add(nil,ptr^.ItemName);
     .........
   end;
   CloseFile(f);
   Dispose(ptr);
end;

При нажатии кнопки ButtonWrite в файл что-то записывается. А при чтении (ButtonRead) выдаются какие-то ошибки типа "Access violation at adress.." и др.
Может быть у меня в коде что-то не так?


mr.Spok   (2005-06-05 17:04:00) [1]

Насчёт [2] я так понял нада так:
  GeoFile = record
             ItemName:string[30];
             ItemFunction:string[30];
             ItemDescription:string[30];
             end;
type TGeoFile = GeoFile;
.....
var F: file of TGeoFile, ptr:TGeoFile;
begin
   Write(f,ptr);
   Read(f,ptr);end;


А что такое [3]: packed record?


DiamondShark   (2005-06-05 16:55:00) [2]

Но в файл-то зачем писать указатель?


mr.Spok   (2005-06-05 16:53:00) [3]

указатель на структуру пришлось использовать потому, что я туда загоняю данные через TreeView.Items.Item[1].Data : pointer;


Anatoly Podgoretsky   (2005-06-05 16:18:00) [4]

Ой, не обратил внимания, не думал там о ткаой дурости, как файл указателей.
На самом деле код очень нехороший, надо делать как в [2]


begin...end   (2005-06-05 16:11:00) [5]

> Anatoly Podgoretsky ©   (05.06.05 16:09) [4]

Тогда и тип файла нужно исправить.


Anatoly Podgoretsky   (2005-06-05 16:09:00) [6]

    Write(f,ptr^);
    Read(f,ptr^);


BugMaker   (2005-06-05 15:00:00) [7]

TGeoFile = packed record

F: file of TGeoFile


begin...end   (2005-06-05 14:55:00) [8]

А, нет, извините. Дело даже не в этом. А в том, что в файл вместо данных записываются указатели на них. Что мешает сделать файл file of TGeoFile, объявить переменную типа TGeoFile и читать/записывать именно её?


begin...end   (2005-06-05 14:52:00) [9]

> mr.Spok   (05.06.05 14:46)

> Read(f,ptr)

Read(f, ptr ^)


Наверх

Титульная страница Поиск, карта сайта Написать письмо