Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Файловая система
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.04.2011, 18:55
Юрка Юрка вне форума
Прохожий
 
Регистрация: 04.04.2011
Сообщения: 13
Репутация: 10
По умолчанию Чтение из ini файла

Есть 2 процедуры, одна пишет данные из listBox в ini файл, другая наоборот, считывает из ini в listBox. Как раз при чтении происходит ошибка: List index out of bounds (0)
Код:
procedure TForm1.N18Click(Sender: TObject);        //сохранить список
var
  F: TIniFile;
  i:integer;
begin
if ListBox1.Count>0 then
 begin
  F := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'PlayList.ini');
  F.EraseSection('Track');

 for i := 0 to ListBox1.Count - 1 do
 F.WriteString('Track', InttoStr(i), ListBox1.Items[i]);
end;
end;

procedure TForm1.N19Click(Sender: TObject);  //восстановить список
var
  F: TIniFile;
  i:integer;
  begin
if listBox2.Visible then
  begin
  ListBox1.Clear;
  ListBox2.Clear;
  begin
  i:=0;
    F := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'PlayList.ini');
  Repeat
   ListBox1.Items.Add(F.ReadString('Track',Inttostr(i),  ListBox1.Items[i]));
   listbox2.Items.Add(ExtractFileName(listBox1.Items[i]));
   i:=i+1;
    Until(EOF) ;

  end;
  end;

end;
Для примера - это запись плейлиста в файл.
Помогите пожалуйста.
Ответить с цитированием
  #2  
Старый 09.04.2011, 19:09
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Возможно ListBox1.Items[i] пуст.
Сверяй с коунтом.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 09.04.2011, 19:48
Юрка Юрка вне форума
Прохожий
 
Регистрация: 04.04.2011
Сообщения: 13
Репутация: 10
По умолчанию

Так по-моему, ListBox1.Items[i] должен считаться с самого файла
Ответить с цитированием
  #4  
Старый 09.04.2011, 19:51
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Вот смотри, ты сначала чистишь списки, у тебя у них Count == 0, далее ты делаешь Add, по дефолту передаешь значение из ListBox1.Items[i], т.к. список пуст, ты получаешь исключение. Внимательнее на код смотрим.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #5  
Старый 09.04.2011, 20:09
Юрка Юрка вне форума
Прохожий
 
Регистрация: 04.04.2011
Сообщения: 13
Репутация: 10
По умолчанию

Тогда такой вопрос - как получить именно то значение, которое записано в файл?
Ответить с цитированием
  #6  
Старый 09.04.2011, 20:13
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Код:
F.ReadString('Track',Inttostr(i),  EmptyStr)
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #7  
Старый 09.04.2011, 20:18
Юрка Юрка вне форума
Прохожий
 
Регистрация: 04.04.2011
Сообщения: 13
Репутация: 10
По умолчанию

Спасибо за ответы.
Попробовал emptyStr добавить, из файла прочиталась первая строка и вылезла ошибка I/O error 6
Ответить с цитированием
  #8  
Старый 09.04.2011, 20:20
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Until(EOF) ;
Ай-яй-яй!!!
Притянуто за уши, да не то.

Вообще, я бы сначала записывал бы Count (сколько всего файлов), а потом в форе шел бы по секциям F.ReadString('file' + inttostr(i), ...
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 09.04.2011 в 20:23.
Ответить с цитированием
  #9  
Старый 09.04.2011, 20:41
Юрка Юрка вне форума
Прохожий
 
Регистрация: 04.04.2011
Сообщения: 13
Репутация: 10
По умолчанию

Да, я решил тут не мудрить ничего, а прото в файл изначально записать количество строк в ListBox1, а потом считать их оттуда и циклом for добавить во время чтения из файла.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:42.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter