2008-12-06 92 views
4

,如果我有以下目錄結構:串聯Environment.CurrentDirectory背部路徑

PROJECT1 /斌/調試
Project2中/ XML/file.xml

我試圖來引用到file.xml PROJECT1 /斌/調試目錄

我基本上是試圖做到以下幾點:

string path = Environment.CurrentDirectory + @"..\..\Project2\xml\File.xml": 

什麼是正確的這個語法?

回答

9

這可能是更好的操作路徑組件路徑組件,而不是字符串:

string path = System.IO.Path.Combine(Environment.CurrentDirectory, 
            @"..\..\..\Project2\xml\File.xml"); 
+0

這將轉換爲.. \ Project1 \ bin \ debug \ .. \ .. \ Project2 \ ...如果您考慮「..」只是吃了以前的目錄路徑,你會得到.. \ Project1 \ Project2 \ ... – tvanfosson 2008-12-06 13:08:59

+0

夠正確。我沒有把他的數字計算在內 - 他認爲這是因爲他們缺乏領先的「\」。將會進行修改。 – 2008-12-07 01:37:39

+0

爲我工作! +1 – 2011-08-16 15:59:17

4

用途:

System.IO.Path.GetFullPath(@"..\..\Project2\xml\File.xml") 
2
string path = Path.Combine(Environment.CurrentDirectory, 
          @"..\..\..\Project2\xml\File.xml"); 

一 「」 把你帶到斌

下一頁「..」帶你到Project1

下一頁「」帶你到Project的母公司

然後下到文件

1

請注意,使用Path.Combine()可能不會得到預期的結果,例如:

string path = System.IO.Path.Combine(@"c:\dir1\dir2", 
            @"..\..\Project2\xml\File.xml"); 

這導致以下字符串:

@"c:\dir1\dir2\dir3\..\..\Project2\xml\File.xml" 

如果你希望的路徑爲「C:\ DIR1 \ Project2的\ XML \ File.xml」,那麼你可能會使用的方法是這樣一個代替鄰f Path.Combine():

public static string CombinePaths(string rootPath, string relativePath) 
{ 
    DirectoryInfo dir = new DirectoryInfo(rootPath); 
    while (relativePath.StartsWith("..\\")) 
    { 
     dir = dir.Parent; 
     relativePath = relativePath.Substring(3); 
    } 
    return Path.Combine(dir.FullName, relativePath); 
}