如何在C#中find父目录?

我使用这个代码来查找debugging目录

public string str_directory = Environment.CurrentDirectory.ToString(); 

"C:\\Users\\Masoud\\Documents\\Visual Studio 2008\\Projects\\MyProj\\MyProj\\bin\\Debug"

我如何find如下所示的父文件夹?

"C:\\Users\\Masoud\\Documents\\Visual Studio 2008\\Projects\\MyProj\\MyProj"

您可以使用System.IO.Directory.GetParent()来检索给定目录的父目录。

 string parent = System.IO.Directory.GetParent(str_directory).FullName; 

见BOL

如果您将..\..附加到您现有的path,操作系统将正确浏览祖父文件夹。

这应该做的工作:

 System.IO.Path.Combine("C:\\Users\\Masoud\\Documents\\Visual Studio 2008\\Projects\\MyProj\\MyProj\\bin\\Debug", @"..\.."); 

如果您浏览该path,您将浏览祖父目录。

要获得“祖父母”目录,请拨打两次Directory.GetParent() :

 var gparent = Directory.GetParent(Directory.GetParent(str_directory).ToString()); 

我发现System.IO.Path.Combine(myPath, "..")变种是最简单和最可靠的。 更重要的是,如果northben说的是真的,GetParent需要一个额外的电话,如果有一个结尾的斜线。 对我来说,这是不可靠的。

Path.Combine确保你永远不会出现斜杠错误。

在Windows中,其行为与其他地方完全相同。 您可以将任意数量的\..添加到cmd或资源pipe理器中的path中,并且其行为将完全按照以下描述。

一些基本的行为:

  1. 如果有一个文件名, ..将砍掉:

Path.Combine(@"D:\Grandparent\Parent\Child.txt", "..") => D:\Grandparent\Parent\

  1. 如果path是一个目录, ..会向上移动一个级别:

Path.Combine(@"D:\Grandparent\Parent\", "..") => D:\Grandparent\

  1. ..\..遵循相同的规则,连续两次:

Path.Combine(@"D:\Grandparent\Parent\Child.txt", @"..\..") => D:\Grandparent\ Path.Combine(@"D:\Grandparent\Parent\", @"..\..") => D:\

  1. 这也有同样的效果:

Path.Combine(@"D:\Grandparent\Parent\Child.txt", "..", "..") => D:\Grandparent\ Path.Combine(@"D:\Grandparent\Parent\", "..", "..") => D:\

Directory.GetParent可能是一个更好的答案,但为了完整性,有一个不同的方法,需要string并返回string: Path.GetDirectoryName

 string parent = System.IO.Path.GetDirectoryName(str_directory); 

喜欢这个:

 System.IO.DirectoryInfo myDirectory = new DirectoryInfo(Environment.CurrentDirectory); string parentDirectory = myDirectory.Parent.FullName; 

祝你好运!

你可能想看看DirectoryInfoParent属性。

你不应该这样做。 Environment.CurrentDirectory为您提供可执行目录的path。 无论.exe文件在哪里,这都是一致的。 您不应该尝试访问假定位于相对位置的文件

我build议你将你想访问的资源移动到本地。 系统目录(如AppData)

这是最常见的方式 – 这取决于你在做什么:(要解释,下面的例子将删除你所要求的最后10个字符,但是如果有一些业务规则驱动你的需要find一个特定的位置,你应该使用这些来检索目录位置,找不到别的位置并修改它。)

 // remove last 10 characters from a string str_directory = str_directory.Substring(0,str_directory.length-10); 
 IO.Path.GetFullPath(@"..\..") 

如果清除项目属性 – >生成 – >输出path中的“ bin\Debug\ ”,那么你可以使用AppDomain.CurrentDomain.BaseDirectory

为了避免跟踪\的问题,可以这样调用它:

  string ParentFolder = Directory.GetParent( folder.Trim('\\')).FullName; 

要得到你的解决scheme,试试这个

 string directory = System.IO.Directory.GetParent(System.IO.Directory.GetParent(Environment.CurrentDirectory).ToString()).ToString();