Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2009, 11:56   #1
Horus92
Форумчанин
 
Аватар для Horus92
 
Регистрация: 04.05.2009
Сообщений: 147
По умолчанию Сохранение динамического массива

Здравствуйте,у меня проблема я сохранняю массив вроде бы все нормально но при открытии в массиве данных нет.
вот мой код:
Код:
type link=record
rate:integer;
title,path,keyw,comments:string[255];
end;
links=array of link;
var p:links;   n:integer;
Сохранение:
Код:
procedure TForm1.N4Click(Sender: TObject);
var
  F:TFileStream; g:file of link;  i:integer;
begin
  if not savedialog1.Execute then exit;//Сохранение массива
    assignfile(g,savedialog1.FileName);
    rewrite(g);
    for i:=1 to high(p) do
    write(g,p[i]);
finalize(g);
if not savedialog1.Execute  then exit;
  F:=TFileStream.Create(savedialog1.FileName, fmCreate or fmShareCompat);
  try //Сохранение treeview 
    F.WriteComponent(TreeView1);
  finally
    F.Free;
  end;
end;
Открытие:
Код:
procedure TForm1.N3Click(Sender: TObject);
var  F:TFileStream; g:file of link; i:integer;//открытие массива
begin
i:=1;
if not opendialog1.Execute then exit;
assignfile(g,opendialog1.FileName);
reset(g);
while not EOF(g) do
begin
setlength(p,i+1);
read(g,p[i]);
end;
finalize(g);
if not opendialog1.Execute then exit;
  F:=TFileStream.Create(opendialog1.filename, fmOpenRead or fmShareDenyWrite);
  try
    F.ReadComponent(TreeView1);
  finally
    F.Free;
  end;
end;
Horus92 вне форума Ответить с цитированием
Старый 06.05.2009, 12:07   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
finalize(g);
А че CloseFile уже отменили?
Файл то хоть наполняется?
Цитата:
setlength(p,i+1);
Луче так:
Код:
setlength(p,length(p)+1);
read(g,p[high(p)]);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.05.2009, 20:28   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

А кто в цикле будет I увеличивать!?!?!?
Кроме того, т.к. размер типизированного файла всегда равен количеству записей, то можно setlength вынести за цикл:
Код:
reset(g);
k := FileSize(f);
setlength(p,k);
while not EOF(g) do
begin
  read(g,p[i]);
  inc(i);
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.05.2009, 12:36   #4
Horus92
Форумчанин
 
Аватар для Horus92
 
Регистрация: 04.05.2009
Сообщений: 147
По умолчанию

Я уже разобрался
Horus92 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание н-мерного динамического массива Парсифаль Общие вопросы C/C++ 33 02.05.2009 18:29
Удаление динамического массива Сергей089 Общие вопросы C/C++ 3 08.03.2009 13:13
Удаление элементов из динамического массива dashulka Общие вопросы Delphi 4 31.10.2008 14:03
Удаление элемента динамического массива Dogmat Помощь студентам 6 13.07.2008 14:33