如何得到可执行文件的父目录?(50分)

  • 主题发起人 主题发起人 那一刀
  • 开始时间 开始时间

那一刀

Unregistered / Unconfirmed
GUEST, unregistred user!
如: c:/output/demo/demo.exe 的父目录为;C:/output!
 
ExtractFilePath(Application.ExeName)取得当前目录后,再自己处理一下
 
function ParentDir(ChildDir: string):string;
var
i: integer;
begin
for i := Length(ChildDir) downto 1 do
begin
if ChildDir = '/' then
break;
end;
result := copy(ChildDir,1,i);
end;
 
ExtractFilePath(Application.ExeName),再用''..''来返回上级目录
 
function ParentDir(const ChildDir: string):string;
begin
Result:= '';
X:= Pos('/', ChildDir);
if X > 0 then Result:= Copy(ChildDir, 1, X);
end;

 
有这个函数吧
function ParentDir(ChildDir: string):string;
var
i: integer;
source:string;
begin
source:=childdir;
if pos(':/',lowercase(childdir))>0 then
System.Delete(childdir, 1, 4);
i := Pos('/', childdir);
result :=copy(source,1,i+4);
end;
 
搞来搞去,都是先得到当前的程序的目录,再分析字符串而已,要第几层就用第几层。你可以
自己定义一个函数如:
function XParentDir(CurDir: string;DirD:integer):string;
CurDir: string指的是你要分析的目录(当然也可以是当前的程序目录);
DirD:integer指的是你要返回的第几层目录;
整个函数返回的就是要求的目录。如果层数超过了要分析的目录的层数,返回''就可以,
函数的主题也就是分析'/'而已,应该很简单的。自己做一个吧,这也是经常要用的。可惜
我没有做只是一个想法,呵呵[:)]
 
做一个呀!!
 
ChDir(ExtractFileDir(Application.ExeName));
ChDir('..');
 
var
new_path,old_paht:string;
begin
old_path:=ExtractFilePath(Application.ExeName);
While pos('/',old_path)<>0 do
begin
new_path:=new_path+copy(old_ath,1,pos('/',old_path));
delte(old_ath,1,pos('/',old_path));
end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var str,olds,news:string;
h,j,i:integer;
begin
str:='c:/123/1/abc' ;
h:=length(str);
for i:=h downto 1 do
olds:=olds+copy(str,i,1);
j:=pos('/',str) ;
news:=copy(str,1,h-j);
showmessage(news);
end;
 
Delphi6 得到上级目录的列表
注:窗体上放个Listbox显示结果

procedure TForm1.FormCreate(Sender: TObject);
var s:Tstringlist;
i:integer;
begin
form1.Caption :=ExtractFilePath(application.ExeName ) ;
s:=Tstringlist.Create;
s.Delimiter:='/';
s.DelimitedText :=ExtractFilePath(application.ExeName );
s.Delete(s.Count-1);

for i:=1 to s.Count -1 do
s:=s[i-1]+'/'+s;
s[0]:=s[0]+'/';
listbox1.items:=s;
s.Free
end;
 

想不到收到这么多信,给你的函数得不到结果吗?[?]
 
谢谢,可以。测试后发分!
 
后退
顶部