Главная страница
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.01 c
1-17967
Fly`
2002-05-27 17:27
2002.06.06
Освобождаются ли ресурсы ?


4-18182
Alex_LG
2002-04-03 10:45
2002.06.06
Чем отличается GetCurrentTime от GetTickCount ?


7-18170
JonNic
2002-03-12 07:10
2002.06.06
Как определить конфиг-ю компа, какой проц, винт, память(DIMM,SIM,RIMM) ??? Которую определяет BIOS ???


4-18197
heruvim4ik
2002-04-05 00:55
2002.06.06
Как програмно запустить приложение?


3-17835
uncle_m16
2002-05-16 20:23
2002.06.06
Раздуплите как в базе создать генератор