某些父目录的C#路径

某些父目录的C#路径

问题描述:

是否有从当前路径获取某个父目录路径的简短方法。某些父目录的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 \\ .. \\” –

您可以使用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. 在解决方案中的每个项目都试图改变自己的BuildOutput Path

    enter image description here

  2. 你必须做出相对所有的路径像这样的东西

    "..\\datafolder\File.txt" 
    

这里有几个解决方案:

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

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

你也可以看到这个链接的最佳方法找到你的当前路径,好像GetCurrentDirectory可能不是最好的解决办法:get path for my .exe

+0

我必须从不同的文件夹访问同一文件夹,这些文件夹可以放在不同的文件夹中,但所有文件夹都放在“SolutionFolder”中,但它们可以在不同的层次上。 –

你正在寻找的是:

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@"\..\"需要追加的数量。

创建路径的REG关键需要

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

在创建时,您可以使用RegistryKey类下Microsoft.Win32命名空间