从路径中提取文件夹名称

时间:2014-09-11 17:11:20

标签: c# path

我有这样的路径

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

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

问题是路径是动态的,因此我可以使用2014-05-17AL001来代替2012-05-17AL401。保持不变的一件事是ImageTool\output.xml

那么C#等价于GetParentof(GetParentof(\ImageTool\output.xml))

是什么

环顾四周时,我遇到了这个New DirectoryInfo(Path).Name这对我来说是返回ImageTool,这对我没用。

4 个答案:

答案 0 :(得分:7)

如果您可以保证总有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类并使用以下命令恢复父DirectoryInfo:

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

答案 1 :(得分:0)

您也可以在目录分隔符上拆分字符串,然后从数组末尾导航到您想要的位置。

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

答案 2 :(得分:0)

拆分字符串(不像使用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];

答案 3 :(得分:0)

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

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

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