如何在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中,并且其行为将完全按照以下描述。
一些基本的行为:
- 如果有一个文件名,
..
将砍掉:
Path.Combine(@"D:\Grandparent\Parent\Child.txt", "..")
=> D:\Grandparent\Parent\
- 如果path是一个目录,
..
会向上移动一个级别:
Path.Combine(@"D:\Grandparent\Parent\", "..")
=> D:\Grandparent\
-
..\..
遵循相同的规则,连续两次:
Path.Combine(@"D:\Grandparent\Parent\Child.txt", @"..\..")
=> D:\Grandparent\
Path.Combine(@"D:\Grandparent\Parent\", @"..\..")
=> D:\
- 这也有同样的效果:
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;
祝你好运!
你可能想看看DirectoryInfo
。 Parent
属性。
你不应该这样做。 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();