Форум: "Основная";
Текущий архив: 2002.06.06;
Скачать: [xml.tar.bz2];
ВнизЧто-то непонятное с 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c