正在从路径中提取文件夹名称

本文关键字:文件夹 提取 路径 | 更新日期: 2023-09-27 18:21:30

我有一个类似的路径

   Path =  C:'Users'cyberbemon'Documents'Development'Image tool'sources'AL001'2014-05-17'ImageTool'output.xml

我想提取文件夹名称2014-05-17AL001它们稍后将用作文件名例如:CCD_ 3。

问题是路径是动态的,所以我可以使用不同的2012-05-17AL401来代替2014-05-17AL001。保持不变的是ImageTool'output.xml

那么GetParentof(GetParentof('ImageTool'output.xml)) 的C#等价物是什么

当我环顾四周时,我发现了这个New DirectoryInfo(Path).Name这对我来说是返回ImageTool的,对我来说没有用。

正在从路径中提取文件夹名称

如果你能保证总是有3个目录级别,那么

string p =  @"C:'Users'cyberbemon'Documents'Development'Image tool'sources'AL001'2014-05-17'ImageTool'output.xml";
DirectoryInfo di = new DirectoryInfo(p);
string p1 = di.Parent.Parent.Name;
string p2 = di.Parent.Parent.Parent.Name;

DirectoryInfo类的Parent属性是另一个DirectoryInfo,因此只需要对Parent 进行适当数量的递归调用

我应该注意,如果在DirectoryInfo类的构造函数处传递文件,它也可以工作。如果你想坚持字符串的确切性质,那么你可以使用FileInfo类并使用恢复父目录信息

FileInfo fi = new FileInfo(p);
string p1 = fi.Directory.Parent.Name;

您也可以在目录分隔符上拆分字符串,然后从数组的末尾导航到所需的点。

        string[] pathParts = path.Split(new string[] { @"'" }, StringSplitOptions.RemoveEmptyEntries);

拆分字符串(不过不如使用IO函数优雅):

string Path =  @"C:'Users'cyberbemon'Documents'Development'Image tool'sources'AL001'2014-05-17'ImageTool'output.xml";
string[] components = Path.Split('''');
string p1 = components[components.Length - 2];
string p2 = components[components.Length - 3];

您可以使用System.IO.Path.GetDirectoryName(path)从文件/目录中获取目录。在你的情况下,它将是

Path.GetFileName(Path.GetDirectoryName(Path.GetDirectoryName(Path.GetDirectoryName(path))))

但是,创建一个递归方法会更优雅,该方法采用参数中的路径和级别并返回目录名称。