从完整路径获取目录

如果我有:

C:\ TEMP \富\酒吧\

注意: bar是一个目录)

我怎么解析出来:

酒吧

我想到了。

DirectoryInfo info = new DirectoryInfo(sourceDirectory_); string currentDirectoryName = info.Name; 

尝试

 System.IO.Path.GetFileName("C:\\temp\\foo\\bar"); 

只需使用:

 string dirname = new DirectoryInfo(@"C:\temp\foo\bar\").Name; 

根据MSDN,它返回目录的名称,而不是完整路径。

链接到MSDN Library

希望这可以帮助………

看起来很多人已经撤回了他们的答案,这可能是一种耻辱。

这个是值得说明的,只是为了“教人钓鱼”的质量 – 它简短,优雅,由两个独立的东西组成,一旦学会了,就可以重新应用于其他问题。

 string lastPiece = wholePath.Split('\\').Last(); 

如果列表为空,则Last将抛出。

创建新DirectoryInfo实例的情况下执行此操作的最简单方法是使用Path.GetFileName静态方法。 它位于System.IO中。

 using System.IO; string lastFolderName = Path.GetFileName(@"C:\Folder1\Folder2"); 

该变量将设置为“Folder2”。

这比创建DirectoryInfo类的新实例要高效得多

我可以立即想出4种方法

1

  • 如果字符串以斜线结尾,则将其删除
  • 使用Path.GetFilename(或许多其他System.IO方法)

2

  • 将斜杠上的字符串拆分为数组
  • 获取数组的最后一个索引

3

  • 在构造函数中使用它创建一个Uri类
  • 使用Segments属性

4

  • 有人提到的linq方式
 string dirname = new DirectoryInfo(path).Name; Console.WriteLine(dirname); 

在Unix中,这被称为基本名称,快速谷歌提出了这个C#版本的链接 。 我确定还有其他人……

如果上面的答案不能满足你的需求,为什么不直接从最后一个字符串串起来。

 string dirName = originalDirName.Substring(originalDirName.LastIndexOf("\\") + 1); 

当然,你应该做一些检查,如果originalDirName没有在\结束,如果originalDirName长于零,实际上包含\字符。

试试这个

 string DirName = System.IO.Directory.GetParent(@"C:\temp\foo\bar\").Name;