Delphi 多个.ini文件操作
Delphi multiple .ini files operation
最近,我遇到了一个小问题,在尝试读取 .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 中加载一次,但随后被释放。
尝试替换
configini := configini.Create(ExtractFilePath(Application.ExeName) + '\quickfix.ini');
与:
configini := TIniFile.Create(ExtractFilePath(Application.ExeName) + '\quickfix.ini');
您正在尝试对未初始化的变量而不是 class 调用 Create。
最近,我遇到了一个小问题,在尝试读取 .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 中加载一次,但随后被释放。
尝试替换
configini := configini.Create(ExtractFilePath(Application.ExeName) + '\quickfix.ini');
与:
configini := TIniFile.Create(ExtractFilePath(Application.ExeName) + '\quickfix.ini');
您正在尝试对未初始化的变量而不是 class 调用 Create。