2012-12-10 211 views
2

我需要從相對路徑獲取絕對路徑,但使用的不是裝配執行位置的文件夾來解析"."".."Path.GetFullPath不提供這樣的過載。來自相對路徑的絕對路徑與不同的當前文件夾

例如,說我有以下路徑:

..\MyOtherFolder\foo.bar

和大會由執行該文件夾是:

c:\users\me\desktop\source\myproj\bin\debug\

,但它可能在實踐中,是在任何地方。

我想指定「當前」文件夾爲c:\test,因此".."解析爲"c:\"

有誰知道這是否構建到.NET框架中的任何地方?如果沒有,我打算製作一種實用方法,但我想我會先檢查(特別是因爲沒有靜態擴展方法...)。

編輯:

Path.Combine將無法​​正常工作。所有這個方法基本上都是連接兩個字符串。

+0

可能重複[如何相對路徑轉換爲Windows應用程序絕對路徑?](http://stackoverflow.com/q/1399008/299327)。 –

回答

4

如果您目前位於c:\test,並且您想獲得c:\MyOtherFolder\foo.bar而不知道您在c:\test想要做什麼;

Environment.CurrentDirectory = @"..\MyOtherFolder"; //navigation accepts relative path 
string fullPath = Directory.GetCurrentDirectory(); // returns full path 

之後,您可能需要將當前目錄設置回您以前的位置。

+0

儘管更改當前目錄並不十分理想(在Utility方法中,它不是非線程安全的非顯而易見的方法),但這適用於我當前的目的。 – MgSam

+0

這傷害了我身體...... :( –

2

嘗試使用Path.Combine(...)方法,它幫助你實現你想要的..

+1

我認爲OP假設他不知道自己在'c:\ tests'中,他可能在任何地方,並且希望得到一條完整路徑,因此'Path.Combine'將不起作用。 – evanmcdonnal

7

你試過

Path.GetFullPath(Path.Combine(@"C:\test", @"..\MyOtherFolder\foo.bar")) 

這應該做的伎倆。

4
public string FullPathRelativeTo(string root, string partialPath) 
{ 
    string oldRoot = Directory.GetCurrentDirectory(); 
    try { 
     Directory.SetCurrentDirectory(root); 
     return Path.GetFullPath(partialPath); 
    } 
    finally { 
     Directory.SetCurrentDirectory(oldRoot); 
    } 
} 
3

你可以做

new DirectoryInfo(@"..\MyOtherFolder\foo.bar").FullName