Работа с несколькими файлами.ini в Delphi
Недавно я столкнулся с небольшой проблемой, которая вызывает нарушение прав доступа при попытке чтения файлов.ini.
У меня вопрос, могу ли я загрузить несколько файлов.ini (например, settings.ini и data.ini) в рамках одной и той же процедуры? Например, у меня есть два INI-файла, которые я записываю и читаю.
Вот сокращенный процесс, который записывает данные:
//writing to file uninstall.ini
try
ini := TIniFile.Create(edPath.Text + '\Uninstall.ini');
ini.WriteString('Uninstall', 'qfProgramName', Label4.Caption);
ini.WriteString('Uninstall', 'qfUninstPath', edPath.Text);
finally
ini.Free;
end;
И затем, есть этот этот код (в той же процедуре)
configini := configini.Create(ExtractFilePath(Application.ExeName) + '\quickfix.ini');
sectionsCount := getMaxSectionIndex(ExtractFilePath(Application.ExeName) + '\quickfix.ini');
startmenuLoc := GetProperDir(_STARTMENU);
desktopLoc := GetProperDir(_DESKTOP);
for I := 1 to sectionsCount do begin
currentSection := 'qfShortcut_' + IntToStr(I);
shortcutFile := configini.ReadString(currentSection, 'qfShTarget', '');
shortcutDesc := configini.ReadString(currentSection, 'qfShDescription', '');
shortcutFullPath := installPath + '\' + shortcutFile;
shortcutDest := configini.ReadString(currentSection, 'qfShPath', '');
displayName := configini.ReadString(currentSection, 'qfDisplayName', '');
showmessage(startmenuLoc + '\' + displayName + '.lnk');
showmessage(shortcutFullPath);
if shortcutDest = 'spStartMenu' then CreateLink(shortcutFullPath, startmenuLoc + '\' + displayName + '.lnk', '', '');
if shortcutDest = 'spDesktop' then CreateLink(shortcutFullPath, desktopLoc + '\' + displayName + '.lnk', '', '');
Строка со вторым загруженным файлом вылетает с нарушением прав доступа. Не исключено, что проблема возникла в каком-то другом месте, однако я хотел бы, чтобы вы, ребята, посмотрели, может, кто-то увидит другую проблему.
Этот фрагмент предназначен для создания ярлыков на рабочем столе и в меню "Пуск" при загрузке данных из файлов.ini. Файл "quickfix.ini" также загружается один раз в OnCreate, но затем освобождается.
1 ответ
Попробуйте заменить
configini := configini.Create(ExtractFilePath(Application.ExeName) + '\quickfix.ini');
с:
configini := TIniFile.Create(ExtractFilePath(Application.ExeName) + '\quickfix.ini');
Вы пытаетесь вызвать Create для неинициализированной переменной, а не для класса.