Delphi 中如何获取安装文件路径下指定文件夹的具体路径?
例如:安装了一个Eurekalog工具,安装后的文件路径保存在E:\Eurekalog5里面。安装的文件路径不是指定的,可以是C盘。现在我要通过指定一个文件夹的名称来获取...
例如:安装了一个Eurekalog工具,安装后的文件路径保存在E:\Eurekalog 5里面。安装的文件路径不是指定的,可以是C盘。
现在我要通过指定一个文件夹的名称来获取这个文件夹的具体路径。
已知文件夹‘Eurekalog 5\delphi5’获取具体的路径为:E:\Eurekalog 5\delphi5 展开
现在我要通过指定一个文件夹的名称来获取这个文件夹的具体路径。
已知文件夹‘Eurekalog 5\delphi5’获取具体的路径为:E:\Eurekalog 5\delphi5 展开
2个回答
展开全部
方法有二,如下详述:
一、循环测试
已知相对路径,与绝对路径之差仅在于根路径,即探索究竟在哪个分区上,那么,最傻瓜的方法就是从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字样的路径下时,也能找到它。
一、循环测试
已知相对路径,与绝对路径之差仅在于根路径,即探索究竟在哪个分区上,那么,最傻瓜的方法就是从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字样的路径下时,也能找到它。
追问
第一种方法我没用过,不过看上去应该挺复杂的,代码的维护性不太好。
第二种方法我尝试过,还存在一点问题。因为我在机子上同时安装了delphi5跟delphi7.
有些组件是在不同版本上做的,调用的一些单元控件不一样,所以需要做区分。
在安装EurekaLo会创建两个文件夹用来存放Delphi5跟Delphi7调用时所需的项目文件。在DOS命令下通过DCC32编译的时候需要引入单元文件的路径。即 DCC32 -U"E:\EurekaLog 5\delphi5" 。。
展开全部
没有明白你的意思.
ExtractFilePath(Application.ExeName)可以获取当前运行的程序所在的路径.
ExtractFilePath(Application.ExeName)可以获取当前运行的程序所在的路径.
更多追问追答
追问
谢谢,这种方法我尝试过,但是考虑到执行文件的名称可能存在重复的,使用这种方法不能保证结果输出的准确性。
追答
Application.Exename 获取得到的当前程序的路径, 如
'C:\Program Files\Borland\Delphi7\Projects\Project1.exe'
而ExtractFilePath,是取路径: C:\Program Files\Borland\Delphi7\Projects\
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询