2015-04-17 147 views
2

是否有從當前路徑獲取某個父目錄路徑的簡短方法。某些父目錄的C#路徑

我有這樣一個路徑:

"c:\\users\\userName\\documents\\visual studio 2013\\Projects\\SolutionName\\ProjectName\\bin\\Debug" 

和我想的路徑,「解決方案名稱」目錄下,這樣

"c:\\users\\userName\\documents\\visual studio 2013\\Projects\\SolutionName" 

我需要它,因爲我存儲一些數據文件夾

"c:\\users\\userName\\documents\\visual studio 2013\\Projects\\SolutionName\\DataFolder" 

我需要從我的解決方案中的不同項目訪問它。

謝謝大家,有什麼我完成了

public static string GetParent(string parentName,string FileName) 
    { 
     var dir = new DirectoryInfo(System.IO.Directory.GetCurrentDirectory()); 

     while (dir.Parent.Name != parentName) 
     { 
      dir = dir.Parent; 
     } 
     return dir.Parent.FullName+"\\Data\\"+FileName; 
    } 

我接受卡勒姆·布拉德伯裏的答案,因爲我只是改變了它不會是遞歸的。

+1

如果你只是想訪問的文件夾(而不是顯示路徑) ,您可以簡單地將「..」附加到完整路徑:「c:\\ users \\ userName \\ documents \\ visual studio 2013 \\ Projects \\ SolutionName \\ DataFolder \\ .. \\」 –

回答

3

您可以使用DirectoryInfo類使用一個小的迭代函數相對容易地完成此操作。

public string GetParent(string path, string parentName) 
    { 
     var dir = new DirectoryInfo(path); 

     if (dir.Parent == null) 
     { 
      return null; 
     } 

     if (dir.Parent.Name == parentName) 
     { 
      return dir.Parent.FullName; 
     } 

     return this.GetParent(dir.Parent.FullName, parentName); 
    } 
+0

謝謝,這是我正在尋找,但我改變了它,所以它不會遞歸。 –

+0

如果parentName不是當前目錄的父目錄,那麼您的更改會得到空引用異常。不管這是不是一個問題都取決於你。很高興我能幫上忙 –

1

如果你想要一個乾淨的解決方案遵循這個步驟

  1. 在解決方案中的每個項目都試圖改變自己的BuildOutput Path

    enter image description here

  2. 你必須做出相對所有的路徑像這樣的東西

    "..\\datafolder\File.txt" 
    
0

這裏有幾個解決方案:

string dataFolder = Directory.GetCurrentDirectory() + "..\\..\\..\\DataFolder" 

string dataFolder = Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory())) + "\\DataFolder"; 

你也可以看到這個鏈接的最佳方法找到你的當前路徑,好像GetCurrentDirectory可能不是最好的解決辦法:get path for my .exe

+0

我必須從不同的文件夾訪問同一文件夾,這些文件夾可以放在不同的文件夾中,但所有文件夾都放在「SolutionFolder」中,但它們可以在不同的層次上。 –

1

你正在尋找的是:

var curd = Environment.CurrentDirectory; 
// this will give you current directory for eg: if you are in "Debug" mode then "c:\users\userName\documents\visual studio 2013\Projects\SolutionName\ProjectName\bin\Debug" and if you are in "Release" mode then "c:\users\userName\documents\visual studio 2013\Projects\SolutionName\ProjectName\bin\Release" 
現在你要的是你的路徑名,直到 SolutionName文件夾是 3水平了,所以你要做的就是追加到上述線路

@"\..\..\..\"

var curd = Environment.CurrentDirectory + @"\..\..\..\"; 

,你就完成了。

Key想要上升的水平的數量從current directory@"\..\"需要追加的數量。

0

創建路徑的REG關鍵需要

Microsoft.Win32.RegistryKey key; 
key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Names"); 
key.SetValue("Name", "Isabella"); 
key.Close(); 

在創建時,您可以使用RegistryKey類下Microsoft.Win32命名空間