2013-02-10 138 views
0

我在我的項目文件夾外有一個XML文件,我想從我的代碼中訪問它,以便在任何機器上執行代碼,我會把路徑放在相對於該項目的目錄。硬編碼C中的相對路徑#

比方說作爲我的當前目錄是在文件夾A的例子,我想訪問該文件夾B中旁邊A.

+3

http://stackoverflow.com/questions/6041332/best-way-to-get-application-folder-path – kenny 2013-02-10 11:10:10

+1

該項目的目錄(如'.csproj'文件的目錄)將無關緊要目標機器,但可執行文件的目錄('.exe'文件)可能是。 *是可執行文件和Xml文件之間的相對路徑? – 2013-02-10 11:10:41

+0

你對這個文件的位置有任何控制嗎?如果它是從其他應用程序或用戶操作生成的,則總是有可能發生某些變化。爲什麼不使用配置文件並閱讀那裏的確切位置? – Steve 2013-02-10 12:21:45

回答

4

如果XML文件始終是你的應​​用程序文件夾,您可以使用內。

Environment.CurrentDirectory

工作路徑不一定是其中的可執行文件的位置。爲確保您可以使用從MSDN獲取的以下代碼。

string path; 
path = System.IO.Path.GetDirectoryName( 
     System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); 

否則,如果它是Microsoft特殊文件夾的一部分,例如.e.g MyDocuments,則可以使用。

Environment.SpecialFolder.MyDocuments

你會使用這樣的。

Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), 
              "myfile.xml") 

輸出將是當前用戶My Documents文件夾中myfile.xml的路徑。在我的情況下,它會給我C:\Users\eandersson\Documents\myfile.xml

Path.Combine在這裏非常有幫助,因爲它可以讓我們將多個磁盤路徑合併爲一個。

編輯需要評論的其他信息。

我認爲最好的方法是使用Directory.GetParent

Directory.GetParent(Environment.CurrentDirectory).FullName 

並做這樣的事情。

Path.Combine(Directory.GetParent(Environment.CurrentDirectory).FullName, "PathB", "myfile.xml") 

這會在您的項目文件夾相同的位置尋找PathB。

C:\MyProjects\PathA\MyExecutable.exe 
C:\MyProjects\PathB\myfile.xml 

比方說,你正在運行從該位置MyExecutable.exe。上面的代碼應該自動返回PathB中的第二個位置,文件爲myfile.xml

+0

可以說我當前的目錄在文件夾A中,而文件在A..how旁邊的文件夾B中,這可以解決它嗎? – 2013-02-10 11:17:34

+0

請讓我知道,如果這是你在找什麼。 :) – eandersson 2013-02-10 11:31:45

+1

是的,它實際上工作......謝謝你大的時間;) – 2013-02-10 11:34:23