有什么方法可以搜索特定的父目录吗?
我知道我可以使用该目录获取父目录
Directory.GetParent(Directory.GetCurrentDirectory()).FullName
但是这返回了直接父对象,我有什么办法可以在路径的目录层次结构中搜索特定的父对象?
编辑
我要实现的目标是说我是否有当前目录
C:/Project/Source/Dev/Database
所以我想访问目录Source
我知道我可以通过两次调用GetParent
方法来达到目的,但是我认为这不是正确的方法,因为如果将来我的文件当前目录更改并且它进一步下降,该怎么办。
因此,我想要一种完全证明的方式,无论我在当前目录中的深度如何,都可以直接找到目录Source
的路径,因为可以肯定的是,我将位于目录Source
内>
类似
FindParent('Source')
答案 0 :(得分:1)
您可以尝试以下操作(for
循环):
private static IEnumerable<String> ParentDirectories(string directory = null) {
for (string dir = null == directory ? Directory.GetCurrentDirectory() : directory;
dir != null;
dir = Directory.GetParent(dir)?.FullName)
yield return dir;
}
演示:
var demo = string.Join(Environment.NewLine,
ParentDirectories(@"C:/Project/Source/Dev/Database"));
Console.Write(demo);
结果:
C:/Project/Source/Dev/Database // initial directory
C:\Project\Source\Dev // and its all parents
C:\Project\Source
C:\Project
C:\
如果您不想自己包含目录 ,请添加.Skip(1)
:
var demo = string.Join(Environment.NewLine,
ParentDirectories(@"C:/Project/Source/Dev/Database").Skip(1));
最后,如果您想找到以Source
结尾的父目录:
string dirName = "Source";
string myParent = ParentDirectories(@"C:/Project/Source/Dev/Database")
.FirstOrDefault(dir => string.Equals(
dirName,
new DirectoryInfo(dir).Name,
StringComparison.OrdinalIgnoreCase));
Console.Write(myParent);
结果:
C:\Project\Source
答案 1 :(得分:1)
Directory.GetCurrentDirectory()
returns a string that represents the full absolute path of the current directory.
If you want to get the path of a specific parent directory, you can simply use substring
:
var path = Directory.GetCurrentDirectory(); // Suppose C:/Project/Source/Dev/Database
var sourceDir = new string[] {Path.DirectorySeparatorChar + "Source" + Path.DirectorySeparatorChar,
Path.AltDirectorySeparatorChar + "Source" + Path.AltDirectorySeparatorChar};
var sourcePath = path.IndexOf(sourceDir[0], StringComparison.OrdinalIgnoreCase) > -1 ?
path.Substring(0, path.IndexOf(sourceDir[0]) + sourceDir[0].Length) :
path.IndexOf(sourceDir[1], StringComparison.OrdinalIgnoreCase) > -1 ?
path.Substring(0, path.IndexOf(sourceDir[1]) + sourceDir[1].Length) :
null;
I've used Path.DirectorySeparatorChar
and Path.AltDirectorySeparatorChar
as separators so that the code will work the same on each platform.
答案 2 :(得分:0)
没有您的情况的其他信息的两种可能性:
DirectoryInfo.GetDirectories将为您提供 Current 目录的所有子目录,因此您需要将当前目录切换为根目录+1
System.IO.Path.Combine(myPath, ".."),其作用类似于cd ..
答案 3 :(得分:0)
实际上,我认为已经存在一种方法或功能,但是如果我必须自己编写,那么我写的这个解决方案对我来说很有效
private static string GetParent(string directoryPath, string parent)
{
DirectoryInfo directory = new DirectoryInfo(directoryPath);
while (directory.Parent!=null)
{
if (directory.Parent.Name.ToLower() == parent.ToLower())
{
return directory.Parent.FullName;
}
directory = directory.Parent;
}
return null;
}