我有这样的路径
Path = C:\Users\cyberbemon\Documents\Development\Image tool\sources\AL001\2014-05-17\ImageTool\output.xml
我想提取文件夹名称2014-05-17
和AL001
它们稍后将用作文件名
例如:140517-AL001.xml
。
问题是路径是动态的,因此我可以使用2014-05-17
和AL001
来代替2012-05-17
和AL401
。保持不变的一件事是ImageTool\output.xml
那么C#等价于GetParentof(GetParentof(\ImageTool\output.xml))
环顾四周时,我遇到了这个New DirectoryInfo(Path).Name
这对我来说是返回ImageTool,这对我没用。
答案 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))))
但创建一个递归方法会更优雅,该方法在参数中获取路径和级别并返回目录名称。