编辑路径中的第一个INI文件

时间:2013-04-24 18:50:01

标签: delphi

我的软件使用DLL,它由INI文件配置。它获得了第一个具有特定名称(如果重要的话,Bemafi32.ini),它可以在系统路径中找到。

我想在我的软件中添加编辑此文件的功能。如果我的系统有2个或更多具有相同名称的文件(非常非常普通),我不想错误。我怎样才能确保获得正确的文件?

2 个答案:

答案 0 :(得分:5)

要查找路径中的第一个INI文件,请将the other answerFileSearchGetEnvironmentVariable一起使用。 DLL更可能使用与自身位于同一目录中的INI文件,而不是路径中的第一个。否则,所有副本的DLL将使用相同的 INI文件,因为所有进程的路径通常是相同的。

要将INI文件放在与DLL相同的目录中,您需要知道DLL的位置,并且可能需要知道要加载的DLL的哪个副本。这不是最容易弄明白的事情,因此您可以将负担转移到操作系统:

  1. 使用LoadLibrary自行加载DLL。操作系统将使用其常规搜索算法来查找DLL。
  2. 调用GetModuleFileName以找出您加载的DLL的路径。
  3. 在与DLL相同的目录中打开INI文件。
  4. (如果您的程序已经加载了DLL,因为它使用 DLL,那么您可以调用GetModuleHandle而不是LoadLibrary。)

答案 1 :(得分:4)

  

@ user539484,我猜你的评论最好能回答......

没问题,我可以将其作为答案,但只有当您确定您的DLL的行为与您在问题中描述的完全一致时,它才会是解决方案 。请记住,DLL search strategy比在PATH中找到第一个匹配文件要复杂得多。

var
  IniPathName: TFileName;
begin
  IniPathName := FileSearch('Bemafi32.ini', GetEnvironmentVariable('PATH')); { do not localize }
  Assert(IniPathName <> '', 'Unable to locate file');
  { ... }

参考: