2015-09-30 50 views
-1

的根目錄我有執行Delphi應用程序和當我打電話GetCurrentDir以下回報:返回的Delphi可執行

C:\ dev的\ W32 \ 2015 \ BCSLBDemo \的Win32 \調試

當我打電話ExtractFileDir(GetCurrentDir())我收到以下:

C:\ dev的\ W32 \ 2015年\ BCSLBDemo \ Win32的

我的願望是什麼C:\dev\w32\2015\BCSLBDemo

function RetRoot: string; 
var 
    i: Integer; 
    buf: string; 
begin 
    Result := ''; 
    buf := ExtractFileDir(GetCurrentDir()); 
    i := Length(buf); 
    repeat 
    dec(i); 
    until (buf[i] = '\') or (i < 3); 
    if buf[i] = '\' then 
    begin 
    Delete(buf, i, Length(buf)); 
    Result := buf; 
    end; 
end; 

我寫了這個函數來獲得期望的結果。我想知道是否有更好的方法來完成檢索Delphi可執行文件的根目錄。

+2

我想你需要定義你的意思是一個Delphi可執行文件的根目錄。假設您將可執行文件複製到程序文件目錄下的文件夾中,就像您安裝它一樣。什麼是根目錄。 FWIW,當前目錄只是巧合地與可執行文件所在的目錄相同。它不一定是。你的文本處理代碼是非常不必要的。您可以將其全部刪除並替換爲標準函數調用。 –

+1

所以,你可以編寫'ExtractFileDir(ParamStr(0))'來獲取包含可執行文件的目錄。並提升兩個目錄'ExtractFileDir(ExtractFileDir(ExtractFileDir(ParamStr(0))))''。但你爲什麼要加強兩個目錄?這似乎很奇怪。如果你想得到更好的幫助,那麼你應該解釋你將如何處理這些信息。 –

+0

大衛我相信我知道如何做這些事情。你的回答非常好。由於持續的火警,我沒有時間進一步查看您的產品。文件解釋你提到的事情在哪裏?感謝Arch –

回答

2

還有另外一種方式:

ExpandFileName(GetCurrentDir + '\..\..\'); // Current folder 
ExpandFileName(ExtractFileDir(Application.ExeName) + '\..\..\'); // Exe folder 

C:\ dev的\ W32 \ 2015年\ BCSLBDemo

將帶你向上兩級,你可以看到。

當然,這隻能回答「如何獲得2個等級」的問題。關於Exe根的問題是一種無意義的問題。你可能只需要配置您的項目設置爲不使Win32\Debug文件夾或移動數據文件到有;-)

7

可以使用獲得的完整路徑的可執行應用程序:

ParamStr(0); 

對於基於表單的應用程序,你也有可用的Application對象:

Application.ExeName; 

要獲得路徑沒有文件名的文件,你可以考慮使用ExtractFileDirExtractFilePath

這兩者之間的區別是,ExtractFilePath retuns與最後定界符(/\)的路徑和ExtractFileDir截斷它。


David Heffernancomment,多次調用陳述ExtractFileDir允許得到父目錄:

C:\dev\w32\2015\BCSLBDemo\Win32\Debug\Project1.exe您可以獲得C:\dev\w32\2015\BCSLBDemo這樣的:

ExtractFileDir(ExtractFileDir(ExtractFileDir(ParamStr(0)))); 
+0

你知道'Application.ExeName'是如何實現的嗎?它是'ParamStr(0)'。那麼爲什麼要區分呢? –

+0

@DavidHeffernan回答修改O :-) – fantaghirocco

+0

您是否閱讀過這個問題的一部分,*我想要的是「C:\ dev \ w32 \ 2015 \ BCSLBDemo」*?您是否閱讀過我的評論? –

0

可以使用獲得到應用程序可執行文件的完整路徑:

德爾福2010申報用途 SWSystem;

德爾福氙申報用途 IWSystem;

showmessage(gsAppPath);