Работа с несколькими файлами.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 для неинициализированной переменной, а не для класса.

Другие вопросы по тегам