Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.005 c
4-18188
ProNix
2002-04-03 16:48
2002.06.06
Как скрыть процесс в Win 2000


1-17874
FATman
2002-05-26 22:56
2002.06.06
Как добавить условие run-time.


1-18047
jenbbond
2002-05-25 10:12
2002.06.06
Ошибка


14-18151
anod
2002-05-02 18:43
2002.06.06
Книги по Win32 Api для Delphi


1-18008
DenNNis
2002-05-24 12:29
2002.06.06
SaveDialog ???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский