2015-04-17 6 views
2

Есть ли короткий путь для получения определенного родительского пути каталога из текущего пути.Путь C# к определенному родительскому каталогу

У меня есть этот путь:

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

и я хочу, чтобы получить путь к каталогу «SolutionName», как это

"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

Создание ключа рег с пути вам нужно

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

При создании можно использовать RegistryKey класс под Microsoft.Win32 имен

Смежные вопросы