方法有二,如下详述:
一、循环测试
已知相对路径,与绝对路径之差仅在于根路径,即探索究竟在哪个分区上,那么,最傻瓜的方法就是从C循环至Z,逐一测试路径是否存在,大致代码为:
function GetEurekaLogDir : string;
const
C_sDir : string = 'Eurekalog 5\delphi5';
var
i : Integer;
s : string;
begin
Result := '';
for i := Ord( 'C' ) to Ord( 'Z' ) do
begin
s := Chr( i ) + ':\' + C_sDir;
if DirectoryExists( s ) then
begin
Result := s;
Exit;
end;
end;
end;
也可以增加一点儿“技术含量”,不是简单地从C循环至Z,而是先获取系统具有的分区配置,仅在配置列表中循环测试,调用GetLogicalDrives或GetLogicalDriveStrings均可实现。
二、查询注册表
不少软件安装后,会在注册表中记录其安装位置,对于EurekaLog的安装位置,可以手工打开注册表编辑器(RegEdit),查找到它的位置,记住其关键的路径,然后编程序获取该路径下的键值。
这个方法应该更加正规,它还支持软件在安装之际,人为改变了安装路径的情形。例如,你把EurekaLog安装在"c:\program files\myPreferred"等不带EurekaLog字样的路径下时,也能找到它。
没有明白你的意思.
ExtractFilePath(Application.ExeName)可以获取当前运行的程序所在的路径.