Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.03.09;
Скачать: [xml.tar.bz2];

Вниз

Странное поведение TIniFile   Найти похожие ветки 

 
Danilin   (2004-02-25 13:30) [0]

Я храню сообщения в TIniFile. Но при попытке выполнить код :
if FileExists("c:/SVGA.ini") then begin
SVGAIniFile:=TIniFile.Create("c:/SVGA.ini");
Edit1.Text:= SVGAIniFile.ReadString("Game1","Name","Game 1") ;
Edit2.Text:= SVGAIniFile.ReadString("Game2","Name","Game 2") ;
Edit3.Text:= SVGAIniFile.ReadString("Game3","Name","Game 3") ;
и т. д.


на втором ReadString получаю ошибку времени выполнения. Почему? Ошибка возникает под 6 и 7 делфях.


 
Sandman25+1   (2004-02-25 13:31) [1]

Какую ошибку?


 
Anatoly Podgoretsky   (2004-02-25 13:33) [2]

Неверный синтаксис в имени файла. Это не Интернет, а файловая система MS DOS


 
Ega23   (2004-02-25 13:35) [3]

А почему слэш прямой?
Какого размера SVGA.ini?


 
Андрей Сенченко   (2004-02-25 13:37) [4]

"c :/SVGA.ini"

Правда каким образом при этом FileExists возвращает TRUE - непонятно ...


 
Sandman25+1   (2004-02-25 13:37) [5]

Слэш только сейчас заметил.
А почему сработал FileExists???


 
Anatoly Podgoretsky   (2004-02-25 13:41) [6]

А может он и не сработвал, просто там отладчик остановился. Информации подробной нет.


 
PVOzerski   (2004-02-25 13:41) [7]

А в NT-системах и прямой слэш работает правильно, кстати.


 
Anatoly Podgoretsky   (2004-02-25 13:43) [8]

PVOzerski © (25.02.04 13:41) [7]
А как тогда различается имя от параметра?


 
Андрей Сенченко   (2004-02-25 13:44) [9]

PVOzerski © (25.02.04 13:41) [7]

Тогда дело было не в бобине - все ReadString-и должны отработать.

Danilin (25.02.04 13:30)

А можно воочию увидеть раздел GAME2 Вашего INI-файла ?


 
Андрей Сенченко   (2004-02-25 13:45) [10]

Anatoly Podgoretsky © (25.02.04 13:43) [8]

По всей видимости по наличию пробела ?


 
Anatoly Podgoretsky   (2004-02-25 13:50) [11]

Проверил принимает ключи и без пробела перед ними

cmd/? и cmd /? восриняты одинаково


 
Danilin   (2004-02-25 14:17) [12]

Размер SVGA.ini 136 байт. Все секции заведомо есть. Замена слеша не помогло. При этом при пошаговой трассировке программа входит в блок, первый .ReadString обрабатывается коректно, а на втором получаю ошибку доступа EAccessViolation .


 
Anatoly Podgoretsky   (2004-02-25 14:21) [13]

Приведи текущий исправленный код, часть ини файла относящегося к этому коду и подтверди, что объекты
Edit1, Edit2, Edit3 существуют созданы и в пределах видимости именно те о которых ты подразумеваешь. Это можно проверить и в отладчике, в окне Watch


 
PVOzerski   (2004-02-25 14:23) [14]

2Anatoly Podgoretsky © (25.02.04 13:50) [11]:
Я успешно запустил c:/winnt/system32/command.com :^)
Однако замечу: из-под cmd.exe, а не из-под command.com. Во 2-м случае прямой слэш не годится.


 
Anatoly Podgoretsky   (2004-02-25 14:28) [15]

Я тоже проверял из под cmd.exe, возможно существует какой то элемент интеллектуальности, когда система разбирается где путь, а где начинается параметр, но обе проверки упрощенные, и проще просто соблюдать правила, чем рисковать каждый раз, "а как это система поймет"


 
Anatoly Podgoretsky   (2004-02-25 14:33) [16]

Вот такую проверку не поняла c:/winnt/system32/cmd/?
А такую проверку поняла c:/winnt/system32/cmd /?
И такую проверку поняла c:\winnt\system32\cmd/?

Последняя соответствует системным требованиям


 
PVOzerski   (2004-02-25 14:42) [17]

Во всяком случае, когда надо делать разбор путей, я учитываю и возможность встречи "прямого" слэша.


 
Anatoly Podgoretsky   (2004-02-25 14:48) [18]

Проверять не охота, но вот как отработает ParamStr(0) во всех трех случаях, насколько ожидаемо.
При разборе конечно, но проблема интерпритации последнего слеша остается.


 
Delphin   (2004-02-25 14:53) [19]

if FileExists("c:\SVGA.ini") then begin
SVGAIniFile:=TIniFile.Create("c:\SVGA.ini");
IF SVGAiniFile.ValueExists("Game1","Name") Then
Edit1.Text:= SVGAIniFile.ReadString("Game1","Name","Game 1") ;
IF SVGAiniFile.ValueExists("Game2","Name") Then
Edit2.Text:= SVGAIniFile.ReadString("Game2","Name","Game 2") ;
IF SVGAiniFile.ValueExists("Game3","Name") Then
Edit3.Text:= SVGAIniFile.ReadString("Game3","Name","Game 3") ;
end;
End;
Так по идее должно работать


 
PVOzerski   (2004-02-25 14:56) [20]

{$apptype console}
var
f:text;
begin
writeln(paramstr(0));
assign(f,"D:/User/PAVEL/aaa/aaa.txt");
rewrite(f);
close(f);
end.

Итог проверки (D6 и FPC1.9):
1) в paramstr(0) слэши автоматически заменились на обратные.
2) файл с "прямыми" слэшами успешно создался.


 
olookin   (2004-02-25 15:03) [21]

if FileExists("c:/SVGA.ini") then begin
SVGAIniFile:=TIniFile.Create("c:/SVGA.ini");
Edit1.Text:= SVGAIniFile.ReadString("Game1","Name","Game 1") ;
Edit2.Text:= SVGAIniFile.ReadString("Game2","Name","Game 2") ;
Edit3.Text:= SVGAIniFile.ReadString("Game3","Name","Game 3") ;

Все работает! Ищите в другом месте проблему.


 
Владислав   (2004-02-25 15:05) [22]

Все дело в paramstr(0)
Ей пофигу, что там GetCommandLine возвращает.


 
Anatoly Podgoretsky   (2004-02-25 15:12) [23]

olookin © (25.02.04 15:03) [21]
Скажем из за неакуратной работы с памятью портим в однм месте, а ошибка вылетает в другом месте, я даже уверен, что проверка диапазонов в проекте отключена, а не помешало бы включить и перестроить весь проект, может сразу ключа глюков вылезет.


 
olookin   (2004-02-25 15:26) [24]

[23] Anatoly Podgoretsky © (25.02.04 15:12)
Скажем из за неакуратной работы с памятью портим в однм месте, а ошибка вылетает в другом месте

Согласен, вынужден согласиться, сам с таким сталкивался!


 
Danilin   (2004-02-26 10:54) [25]

Думаете память портится в другом месте? Слеш точно не причем. В явном виде (New и т.д. ) операции с памятью не проводились.
SVGA.ini :
[Game1]
Name=DSA
[Game2]
Name=DSA2
[Game3]
Name=DSA3
[Game4]
Name=DSA4
[Game5]
Name=5
[Game6]
Name=6
[Game7]
Name=7
[Game8]
Name=8


 
Danilin   (2004-02-26 12:22) [26]

Всем спасибо. Разобрался сам. Странное поведение обусловлено тем, у Edit -ов есть обработчик onChange. Где так-же происходит SVGAIniFile.Create и SVGAIniFile.Free . Это и приводит к возникновении ошибки в втором .ReadString .



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

Форум: "Основная";
Текущий архив: 2004.03.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.01 c
7-25948
voronn
2003-12-19 16:32
2004.03.09
загрузка программ в Win2k


14-25942
Empleado
2004-02-17 12:46
2004.03.09
SQL Query


1-25771
Yad
2004-02-26 13:02
2004.03.09
Динамическое создание контролов


6-25837
Typoi_Beginer
2003-12-28 18:29
2004.03.09
Передача данных на удалённый комп.


14-25927
barby
2004-02-09 12:36
2004.03.09
---|Ветка была без названия|---





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский