Показать сообщение отдельно
Старый 20.02.2010, 23:28   #3
Tronix
Знающий
 
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений
(для 331 пользователей)
Ответ: Прошу помощи

Сообщение от firstvirus Посмотреть сообщение
А теперь глянь данные что у тебя выводятся для второго файла и сравни с данными для первого . Индексы во всех списках начинаются не с 1 а с 0, т.е. правильно будет if FI[i].Id = checklistbox1.itemindex+1 then. И вообще для удобства массив лучше было начинать не с 1 а с 0. Еще есть вариант обойтись без массива и решить через связанный список. Правда там писать больше придется, но во первых быстрее работать будет и памяти жрать меньше(вроде). Хотя связанные списки я до сих пор разбираю, но понял что это оч удобно если грамотно использовать . надеюсь помог, а не написал бред .
Дык в Id то находится реальный Id, который я туда запихиваю сразу при добавлении в checklistbox:
// добавляем имя файла на форму
form1.checklistbox1.Items.Append(path+'\'+sr.name);
// и сразу заносим в Id только что добавленный id
FI[Index].Id := form1.CheckListBox1.Items.IndexOf(path+'
\'+sr.name); 
Хм, может забить на Items.IndexOf и считать действительно просто от нуля? Ведь файлы последовательно добавляются... Но все равно интересно, почему такая конструкция не работает.. Странно это.
А насчет связных списков - оно конечно правильно, но вот только сильно влом ))) Вообщем-то тулзу можно сказать для себя пишу, и не хочется заморачиваться с ними просто. Я конечно понимаю, что это быдлокод
А насчет памяти там вообще волноватся не стоит. Я ж каждый файл гружу в память, не смотря на его размер. Когда прогонял тесты, попался EXE файл размером в 900 мб (архив самораспаковывающийся), так я его тоже в память подгрузил прямо весь )) Надо будет потом ограничение сделать и не грузить такие файлы ))
(Offline)
 
Ответить с цитированием