从完整路径获取目录

22

如果我有:

C:\temp\foo\bar\

(注意: bar是一个目录)

我该如何解析出:

bar


酒吧是文件名还是另一个目录? - user46795
bar是一个目录。我已经添加了另一个\以使其明确。 - leora
3
“沙人(Sandman)- 我当然可以手动解析这个问题,但想找一个更优雅的解决方案。如果你可以在stackoverflow上发布这个问题,我不明白为什么你要花30分钟去搜索。现在,下次有人问起这个问题,他们将可以立即在谷歌搜索中找到它。” - leora
1
Leora,我支持你的方法,因为你刚刚节省了我15分钟解析字符串的时间。我就是那个在谷歌上发布问题并立即得到答案的人,这节省了我的时间。感谢你简单但有用的问题。 - Oded
@Sandman 这并不是第一次有自大的用户告诉别人“去谷歌一下”,而第一个结果就是那篇帖子。 - Jack
我同意最后三条评论,让我最恼火的评论是“只要谷歌一下”,在某些情况下,有些人可能已经这样做了,但没有得到有用的结果。 - CodeVomit
10个回答

45

我搞定了。

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

21

试试看

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

11

直接使用:

string dirname = new DirectoryInfo(@"C:\temp\foo\bar\").Name;      
根据MSDN文档,这将返回目录的名称,而不是完整路径。
MSDN Library链接
希望这可以帮到您......

6

看起来一些人撤回了他们的答案,这可能是遗憾的。

这个问题肯定值得提出,因为它具有“授人以鱼不如授人以渔”的优点——它简短、优雅,并且由两个独立的部分组成,一旦学会,就可以应用到其他问题中。

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

Last会在列表为空时抛出异常。


2
也许更好使用(System.IO)PathSeparator吗? - abatishchev
你从哪里获取 Last 方法?Linq?但它不会抛出异常,因为分割结果至少有一个项目。 - Bitterblue

5
使用 Path.GetFileName 静态方法是不需要创建新的 DirectoryInfo 实例的最简单方法。该方法位于 System.IO 中。
using System.IO;

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

变量将被设置为“Folder2”。 这比创建DirectoryInfo类的新实例要高效得多!

你说得对 - 最后一个反斜杠导致了我在示例中遇到的问题.. 否则.. 就如广告所述。 - Matthew M.
3
为了避免最后一个反斜杠可能返回空字符串的情况,我使用了Path.GetDirectoryName(@"C:\Folder1\Folder2"),因为它将在上述两种情况下都返回Folder2,包括Path.GetDirectoryName(@"C:\Folder1\Folder2");。谢谢。 - Oded

4
我可以立即想到四种方法:

1

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

2

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

3

  • 创建一个 Uri 类,并在构造函数中传入该字符串
  • 使用 Segments 属性

4

  • 使用 Linq 中的方法,正如有人之前提到的那样

1
string dirname = new DirectoryInfo(path).Name;  
Console.WriteLine(dirname);   

0
在Unix中,这被称为basename,通过快速搜索谷歌可以找到C#版本的链接。我相信还有其他...

0
如果上面的答案不能满足您的需求,为什么不直接从最后一个 . 子字符串呢?
string dirName = originalDirName.Substring(originalDirName.LastIndexOf("\\") + 1);

当然,如果原始目录名称不以 \ 结尾,并且原始目录名称长度大于零并且实际包含 \ 字符,则应进行一些检查。


好的决定。如果只需要路径中的最后一个目录,那么比拆分更有效。 - core

0

试试这个

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

必须检查结尾处的 \\,否则返回 foo。 - Firo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接