2016-12-06 156 views
2

我目前在c#中的visual studio中編寫項目。 項目完整路徑是:獲取文件的相對路徑C#

"C:\TFS\MySolution\" 

我有我需要在執行過程中加載一個文件。可以說文件路徑是

"C:\TFS\MySolution\Project1\NeedtoLoad.xml" 

我不想編寫硬編碼的完整路徑,並且希望以動態方式獲取路徑。

我用下面的一行:

var path = Directory.GetCurrentDirectory(); 

的問題,每一個,我發現上面的代碼行讓我以下路徑方法:

"C:\TFS\MySolution\Project1\bin\Debug" 

而我需要的是

"C:\TFS\MySolution\Project1\" 

所以我可以連接

NeedtoLoad.xml 

至答案。

我當然可以這樣做:

path.Substring(0, path.IndexOf("bin\\Debug")); 

但它不是那麼優雅。

之前你說這個問題是重複的 請再次閱讀問題,因爲我沒有找到任何這樣做。

回答

2

您可以使用Directory.GetParent及其Parent成員

string path = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName; 

會去平了路徑樹,並返回"C:\TFS\MySolution\Project1"

0

如果該文件是您的項目的一部分,您應確保它在生成時複製到項目輸出中。

在解決方案資源管理器中選擇該文件,然後轉到Visual Studio(F4)中的屬性窗格。選擇'內容'作爲'構建行動'。現在,當您構建解決方案時,該文件將被複制到輸出目錄(bin/Debug或bin/Release)。

0

如果xml是您項目的靜態部分(您不會在運行時覆蓋它),那麼最好的辦法就是將它包含到您的dll中。

  • 轉到文件屬性,使其嵌入的資源
  • 只需從DLL資源,例如加載它

    var asm = Assembly.GetCallingAssembly(); 
    using (var stream = asm.GetManifestResourceStream(resource)) 
    { 
        var reader = new StreamReader(stream); 
        return reader.ReadToEnd(); 
    }