![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запись структуры в файл
mr.Spok © (2005-06-05 14:46:00)Есть такая структура:
type PGeoFile = ^GeoFile;На форме есть компонент TreeView. Требуется записать его некоторые параметры в файл:
GeoFile = record
ItemName:string[30];
ItemFunction:string[30];
ItemDescription:string[30];
end;
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 ^)