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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.10.2015, 11:55   #1
igrnd
 
Регистрация: 26.10.2015
Сообщений: 3
По умолчанию ReadSection() иногда читает секцию ini-файла не полностью

В программе, написанной давным-давно на Delphi 7, вдруг возникла ошибка. Оказалось, что при чтении значений из текстового файла (ini-файл) с помощью функций ReadSection или ReadSectionValues в секциях с большим количеством строк могут не считываться все значения. Опытным путем выяснил, что такое поведение функций зависит от содержания секции.
Поиск решения проблемы на форуме и в интернете ничего не дал. Набросал небольшой пример, чтобы показать наглядно чтение 1000 строк в зависимости от длины строки. Фрагмент кода чтения секции:
Код:
if FileExists(FileName) then  
        try  
           bdfile:=TIniFile.Create(FileName);  
           bd:=TStringList.Create;  
           if bdfile.SectionExists('First') then  
              bdfile.ReadSection('First',bd);  
           ShowMessage('Зарезервированный объем: '+IntToStr(bd.Capacity));  
           ShowMessage('Считано строк: '+IntToStr(bd.Count));  
        finally  
          bdfile.Free;  
          bd.Free;  
        end;
В примере из первого файла читаются все строки, из второго - только 656. В реальных файлах может быть несколько сотен строк разной длины (в среднем примерно 50 символов), одинаковых нет. Проблемы появляются уже при 7-8 сотнях.
С чем может быть связано такое поведение функции и как его побороть?
igrnd вне форума Ответить с цитированием
Старый 26.10.2015, 12:13   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

TIniFile c ограничениями, наверно из-за них
макс строка = 2 Kb
макс файл = 64 Kb (вроде, или 32, точно не помню)

TMemIniFile не имеет этих ограничений
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.10.2015, 14:25   #3
igrnd
 
Регистрация: 26.10.2015
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
TIniFile c ограничениями, наверно из-за них
макс строка = 2 Kb
макс файл = 64 Kb (вроде, или 32, точно не помню)

TMemIniFile не имеет этих ограничений
Спасибо, буду пробовать TMemIniFile.
igrnd вне форума Ответить с цитированием
Старый 27.10.2015, 15:13   #4
igrnd
 
Регистрация: 26.10.2015
Сообщений: 3
По умолчанию

Использование TMemIniFile полностью решило проблему, а заодно и немного ускорило работу приложения. Спасибо.
igrnd вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа читает из файла <data.txt> 10 чисел, перемножает их. решить задачу на турбо паскале bikmai4ik Помощь студентам 2 05.12.2013 13:06
Не правильно читает из файла dimon_medved Общие вопросы C/C++ 0 17.11.2012 00:46
удалить секцию в Ini файле Viten2 Общие вопросы Delphi 6 11.07.2011 18:13
Не читает ВЕСЬ объект из файла Дырдин Общие вопросы C/C++ 2 13.04.2010 09:04
Как прочесть секцию в ini Volkogriz Общие вопросы Delphi 8 04.02.2009 09:37