2013-03-27 276 views
131

我想創建一個轉換文件的程序。我希望用戶能夠將可執行文件放置在任何目錄中,並且在執行該程序時(雙擊.exe),我希望程序處理exe文件存在的當前文件夾中的所有文件。程序如何確定它當前正在執行的路徑?我試過System.Windows.Forms.Application.StartupPath,但這似乎是錯誤的方法。獲取當前文件夾路徑

任何想法?

回答

200

你應該你的情況不使用Directory.GetCurrentDirectory(),爲當前目錄可以從執行文件夾不同,尤其是當你通過一個快捷方式執行程序。

爲了您的目的,最好使用Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);。這將返回當前正在執行的程序集所在的路徑名。

雖然我的建議的方法可以讓你執行的程序集,進入組件或任何其它加載的程序集區分開來,如Soner格尼爾他回答說,

System.IO.Path.GetDirectoryName(Application.ExecutablePath); 

也可能是足夠的。這將是等於

System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); 
+5

GetEntryAssembly()和GetExecutingAssembly()有一個有趣的區別。有關詳細信息,請參閱http://stackoverflow.com/a/18562036/30289 – bhadra 2013-11-08 08:42:40

+0

正如我所說:這將返回當前正在執行的程序集*所在的路徑名。 'GetEntryAssembly'和'GetExecutingAssembly'之間的區別並不令人意外,這一點在函數名稱中也很明顯。如果他們也這樣做,爲什麼應該有兩個功能? :-) – 2013-11-08 08:49:14

+2

+1 Assembly.GetEntryAssembly()幫助我通過clickonce運行應用程序 – Artiom 2014-01-09 13:50:09

12

使用此,

var currentDirectory = System.IO.Directory.GetCurrentDirectory(); 

您可以使用這一點。

var currentDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); 
19
string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath); 

Path.GetDirectoryName

返回指定路徑字符串的目錄信息。

Application.ExecutablePath

獲取啓動了應用程序,包括 可執行文件名的可執行文件的路徑。

6

1.

Directory.GetCurrentDirectory(); 

2.

Thread.GetDomain().BaseDirectory 

3.

Environment.CurrentDirectory 
64
System.AppDomain.CurrentDomain.BaseDirectory 

這會給你運行你的應用程序的目錄。這甚至適用於Web應用程序。之後,您可以訪問您的文件。

+5

這是用於此目的最準確的屬性。即使AppDomain是動態創建的,以查看來自不同位置的程序集,CurrentDomain的BaseDirectory也將始終指向正確的位置。 – dhruvin 2015-04-21 03:05:54

13

我創建用下面的代碼一個簡單的控制檯應用:

Console.WriteLine(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)); 
Console.WriteLine(System.AppDomain.CurrentDomain.BaseDirectory); 
Console.WriteLine(System.Environment.CurrentDirectory); 
Console.WriteLine(System.IO.Directory.GetCurrentDirectory()); 
Console.WriteLine(Environment.CurrentDirectory); 

我複製生成的可執行文件來C:\temp2。然後,我在C:\temp3中放置了一個可執行文件的快捷方式,並運行它(一次從exe本身,一次從快捷方式)。它提供了以下輸出兩次:

C:\temp2 
C:\temp2\ 
C:\temp2 
C:\temp2 
C:\temp2 

雖然我敢肯定,必須有某種繁瑣理由來解釋爲什麼有五個做幾乎同樣的事情不同的方法,我當然不要」不知道它是什麼。儘管如此,在大多數情況下,你可以自由選擇你喜歡的任何一個。

UPDATE: 我修改快捷方式的屬性,改變 「開始:」 字段C:\temp3。這導致下面的輸出:

C:\temp2 
C:\temp2\ 
C:\temp3 
C:\temp3 
C:\temp3 

...這表明至少一些不同方法之間的區別。

+0

非常感謝。 – baj9032 2017-07-10 10:11:23

相關問題