【问题标题】:Delphi multiple .ini files operationDelphi多个.ini文件操作
【发布时间】:2015-04-27 06:12:16
【问题描述】:

最近遇到一个小问题,在尝试读取 .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', '', '');

第二个加载文件的行因访问冲突而崩溃。不排除,问题出在其他地方,不过,我希望你们看看,也许有人会看到另一个问题。

这个 sn-p 用于在桌面和开始菜单中创建快捷方式,从 .ini 文件中加载数据。文件“quickfix.ini”也在 OnCreate 加载一次,但随后被释放。

【问题讨论】:

  • 访问冲突发生在哪一行?
  • 您的try 不正确。像这样:obj := TObject.Create; try dostuff; finally obj.Free; end; 请借此机会学习如何调试。能够自己执行基本调试会更有效率。每次你犯了一个小错误(我们都经常这样做)时都必须问 Stack Overflow 问题是没有效率的。如果您能够进行调试,那么您就会知道哪一行代码引发了访问冲突,并且您就会明白出了什么问题。另一方面,也许您还不知道访问冲突实际上是什么。这些知识是必不可少的。
  • Keith,访问冲突发生在我加载 quickfix.ini 的那一行,但是,即使我注释掉所有其他周围的代码,访问冲突仍然存在。大卫,感谢您的回答,但是,我重新编写了我的尝试语句并且没有任何改变。还有其他想法吗?提前致谢!
  • 我没有说尝试是问题所在。那只是一些免费的建议。我仍然不知道错误发生在哪一行。你仍然可以通过一些调试来解决这个问题。你之前有做过调试,还是总是试图通过阅读代码来解决问题?你知道什么是访问冲突吗?不要误会,我试图引导你学习新技能,让你成为更好的程序员。
  • 谢谢,大卫,我明白你的意思,我知道什么是访问冲突,但我真的不知道如何调试它,或者如何追踪正确的恶意代码行。我唯一知道的是,这个异常出现在 ini.create(quickfix) 中,因为当我注释掉它时,它再也不会发生了......注意:我的访问冲突是在 00000004

标签: delphi ini


【解决方案1】:

尝试替换

configini := configini.Create(ExtractFilePath(Application.ExeName) + '\quickfix.ini');

与:

configini := TIniFile.Create(ExtractFilePath(Application.ExeName) + '\quickfix.ini');

您正在尝试对未初始化的变量而不是类调用 Create。

【讨论】:

  • 基思。我欠你一杯啤酒!非常感谢。
  • 是的,就是这样,很惊讶我们没有发现它,我们以前见过很多次!!干得好。
  • @LukasSynDurjan 请阅读:meta.stackexchange.com/q/5234 以了解接受
猜你喜欢
  • 1970-01-01
  • 2011-01-06
  • 2011-09-01
  • 2012-03-24
  • 2011-10-05
  • 2017-08-08
  • 2019-05-16
  • 2020-12-02
  • 2015-09-14
相关资源
最近更新 更多