Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.06;
Скачать: CL | DM;

Вниз

Что-то непонятное с INI-файлами...   Найти похожие ветки 

 
VID ©   (2002-05-24 11:34) [0]

Вот столкнулся с проблемой...
Var INI:TIniFile;
FNames:TStringList;
I:Integer;
begin
FOR I:=0 To FNames.Count - 1 do {Циклов может быть много - список FNAMES представляет собой список файлов в какой-нибудь директории, а там их может быть до 300 файлов}
begin
INI:=TIniFile.Create (IncludeTrailingBackslash (ExtractFilePath(fnames[I]))+ExtractFileNameEX(Fnames[i],False)+".ini");
{Функция ExtractFileNameEX возвращает "super" от первого параметра (например, "super.Exe"), без расширения - "EXE", если второй параметр = fALSE [Find in UBPFD]}
Ini.WriteString (Section, Key, Value);
Ini.Free;
END;
end;

Так вот в данном примере, после очередного цикла (может, 20-30-го... не знаю) возникает ошибка "Access Violation... in "ntdll.dll" " {OC - win2k}
Т.е. как я понимаю, создаётся слишком много объектов INI:TINIFILE, и почему-то они не успевают уничтожиться... Может и не так...
Во всяком случае, я точно знаю, что на очередном этапе INI := TINIFILE.Create..., предыдущий объект INI ещё не успел уничтожиться (приведённый мною код, не тот что реально присутствует в программе, но он отражает сущность оригинала)... В чём дело ?

PS: Если кто-нибудь захочеть более серьёзно заняться этим вопросом, могу прислать оригинал юнита, а точнее вырезки из него, полность описывающие ситуацию... но может до этого дело и не дойдёт.


 
Smok_er   (2002-05-24 11:47) [1]

Да, была аналогичная ситуация и у меня, только не в цикле.Только EA появлялся при уничтожении объекта. В тот момент спасением было просто комментирование строчки INI.Free; :), хоть это и не является хорошим стилем программирования


 
oomneeq ©   (2002-05-24 12:01) [2]

Eще возможная причина под NT - отсутствие (пустая) Section
Под 95/98 прокатывает а под NT ОБЯЗАТЕЛЬНО должна быть


 
VID ©   (2002-05-24 12:46) [3]

TO Smok_er: у меня тоже при уничтожении объекта возникает иногда...

TO oomneeq: Пустая secion - это

************
[section] < ОНА ЗНАЧИТ ?

[second section]
1=b
2=c
************

блин, если так, то плохо дело... пустые секции действительно есть, но непонятно, чем это плохо ?
Ведь при первом написании WriteString (section, key, value), setion действительно может не существовать, и это вполне нормальное явление... Более того, в других ini-файлах, этой же программы, часто бывает ситуация с пустыми секциями, но никаких ошибок не возникает...
В nt пустая секция не должна существовать при записи или при чтении ?


 
Shaman_Naydak ©   (2002-05-24 13:37) [4]

> Smok_er Это вообще бред, а не нехороший стиль программирования, объекты в памяти оставлять!

> VID
Присылай, вылечим


 
oomneeq ©   (2002-05-24 14:46) [5]

Пустая secion - это когда при записи в ini ты не указываешь название секции, то есть пара NAME=VALUE должнa типа писаться ни в какую ни в секцию, а просто так:
Section:="";
Ini.WriteString (Section, Key, Value);


 
VID ©   (2002-05-24 15:22) [6]

TO oomneeq: понятно... такая ситуация действительно встречается... надо разобраться.

TO Shaman_Naydak: Щас разберусь с ситуацией, если не получиться, то на мыло тебе вообще весь проект скину.


 
VID ©   (2002-05-24 16:47) [7]

TO oomneeq: Ты был прав. действительно из за Section = ""; Большое спасибо.

TO shaman_naydak: спасибо за готовность помочь, но вопрос разрешился и без опубликования кода MS WINDOWS 2000 :)))

TO ALL: Спасибо за внимание.



Страницы: 1 вся ветка

Текущий архив: 2002.06.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.009 c
1-18034
mvg_first
2002-05-24 17:07
2002.06.06
Как перевести количество секунд от начала дня в нормальное время?


3-17778
Dimaiv
2002-05-15 08:08
2002.06.06
Поиск для русских слов учитывает регистр, а для английских нет


3-17829
Glonia Zbanov
2002-05-16 17:56
2002.06.06
Поиск в гриде-DBGridEh


14-18118
SPeller
2002-05-01 04:22
2002.06.06
Русский текст Linux -> Windows


1-17886
alxx
2002-05-17 10:43
2002.06.06
Можно ли програмно заставить SpeedButton вспучиться?