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

Вниз

Ошибка функции inifiles.readstring - как исправить   Найти похожие ветки 

 
kiuv ©   (2004-09-23 18:57) [0]

Представьте себе, пишу на d6 и запускаю ПО под win98. Оно выдает сообщение об ошибке.
Стал выяснять. Оказалось, что программа вылетает на строке чтения из ини файла!!!

  Мая программа с компонетой TiniFiles  в Винде 98 программа создала и работает
с таким инифайлом пример ниже:
[Paths]
WinDir=C:\WIN98
WinBootDir=C:\WIN98
HostWinBootDrv=C

[Options]
BootMulti=1
BootGUI=1
DoubleBuffer=1
AutoScan=1

Откомелированая под W2K программа с компонетой TiniFiles в W2K хочет работать
с таким инифайлом:

[Paths]
WinDir=C:\WINNT
WinBootDir=C:\WINNT
HostWinBootDrv=C
[Options]
BootMulti=1
BootGUI=1
DoubleBuffer=1
AutoScan=1
Как в W2K заставить программу работать со старым инифайлом (с
пропуском строки между секциями)?
Я запутался,если подскажите или направите буду благадарен.
Зарание большое спасибо!


 
Квэнди ©   (2004-09-23 19:00) [1]

Первый вопрос: а зачем? ты же по идее не смотришь этот файл, он же для служебных нужд...


 
Квэнди ©   (2004-09-23 19:03) [2]

и еще: а разве w98 не будет работать с второй версией файла?


 
Defunct ©   (2004-09-23 20:07) [3]

> Представьте себе, пишу на d6 и запускаю ПО под win98.

Представьте себе пишу на D7, ни разу не использовал компонент TIniFiles, и надеюсь никогда не буду использовать.

> Оно выдает сообщение об ошибке.
Ну надо же, какая беда..

> Стал выяснять. Оказалось, что программа вылетает на строке чтения из ини файла!!!
Ну и что ж вы выяснили? Получается выяснили только ситуацию когда появляется ошибка, но причину вы ведь не выяснили. С какой такой радости программа вылетает?! на строчке какого-то левого файла? Смотрите код программы, а не ковыряйте ini-файл, толку будет больше. Тут либо компонент "подгулявший", либо ошибка в программе.

> Как в W2K заставить программу работать со старым инифайлом (с пропуском строки между секциями)?
1. Исправить ошибку в программе.
2. Взять другой компонент для работы с Ini файлами.
3. Искать другие способы работы с ini файлом, например загрузить его в TStringList.

> Я запутался,если подскажите или направите буду благадарен.
1. Старайтесь не использовать сильно "вумные" компоненты для выполнения простой работы.
2. Старайтесь анализировать собственный код программы.
3. Не полагайтесь на других программистов, которые выпускают бесплатные компоненты.


 
П7   (2004-09-23 23:02) [4]

Эээх!!! Сильно задвинул!!! Полностью поддерживаю!!!


 
Palladin ©   (2004-09-24 01:33) [5]


> kiuv ©   (23.09.04 18:57)

Если ты действительно 63 то я 171 до нашей эры... запутатся в трех соснах не каждому дано...


 
jack128 ©   (2004-09-24 02:52) [6]

Defunct ©   (23.09.04 20:07) [3]
ни разу не использовал компонент TIniFiles, и надеюсь никогда не буду использовать.

А что так?? Очень удобный механизм..

2Автор.
Забей на сторонние компоненты и используй стандартный TIniFile.


 
Defunct ©   (2004-09-24 03:11) [7]

> А что так?? Очень удобный механизм..
так исторически сложилось, а менять привычки тяжело да и смысла нет.

Зы: а разницу вы почуствовали TIniFile и TIniFiles? ;)


 
П7   (2004-09-24 09:30) [8]


> jack128 ©   (24.09.04 02:52) [6]

По мне, так уж лучше пользоваться WinAPI"шными функциями. Там хоть можно всё содержимое секции получить, если в идентивикатор передать пустую строку. А этот тупой TIniFile просто ломается на таком запросе. Мог бы хотябы дефолтовое значение возвратить, но нет же... Лично я написал свой класс работы с ini-файлами. Пусть он тормозной, но для ini-файлов скорость и не нужна большая. Секундой больше, секундой меньше...


 
jack128 ©   (2004-09-24 12:22) [9]

Defunct ©   (24.09.04 3:11) [7]
Зы: а разницу вы почуствовали TIniFile и TIniFiles? ;)

почувствовал. И еще заметил слово "компонент".


 
kiuv ©   (2004-09-27 14:56) [10]

Спасибо за замечания.Этот ининциализационый файл используют две разные программы. Одна работает уже давно под W98, а другая W2K. И старая программа использует класс TIniFile "uses TIniFiles;".
Попробую TStringList использовать. Как пользоваться WinAPI"шными функциями не разобрался, а классом TIniFile кажется удобней. Так как мне кажется все новое - это забытое старое.


 
TUser ©   (2004-09-27 15:14) [11]


> uses TIniFiles

Вот никто и не знает, что за модель ты подцепил :(

По сабжу - D7, TIniFile работает нормально в W2K, и пустые строки между секциями ему - не помеха.


 
panov ©   (2004-09-27 15:48) [12]

function IniName:String;
var
 Len: Integer;
begin
 Result := ParamStr(0);
 Len := Length(Result);
 Result[Len] := "i";
 Result[Len-1] := "n";
 Result[Len-2] := "i";
end;

function GetParmStr(const aSec,aParm:String): String;
var
 LenBuf: Integer;
begin
 SetLength(Result,4096);
 try
   LenBuf := GetPrivateProfileString(PChar(aSec),PChar(aParm),"",PChar(Result),4096,PChar(IniName));
   SetLength(Result,LenBuf);
 except
   Result :="";
 end;
end;

function WriteParmStr(const aSec,aParm,aValue:String):Boolean;
begin
 Result := Boolean(WritePrivateProfileString(PChar(aSec),PChar(aParm),PChar(aValue),PChar(IniName)));
end;



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

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

Наверх




Память: 0.5 MB
Время: 0.039 c
14-1092729585
Piter
2004-08-17 11:59
2004.10.10
Magic Forum beta9 - клиент форумов "Мастера Дельфи" и "Дремучие"


11-1081250753
Alex E
2004-04-06 15:25
2004.10.10
Не могу загрузить новую версию KOL


11-1080941112
DriveSoftware
2004-04-03 01:25
2004.10.10
Как создать вторую форму в проекте KOL+MCK


14-1095925098
begin...end
2004-09-23 11:38
2004.10.10
NTFS


1-1096008578
eagle2002
2004-09-24 10:49
2004.10.10
ActiveX