如何从路径字符串中获取最后一个文件夹?

Posted

技术标签:

【中文标题】如何从路径字符串中获取最后一个文件夹?【英文标题】:How can I get the last folder from a path string? 【发布时间】:2015-01-17 02:28:46 【问题描述】:

我有一个看起来像这样的目录:

C:\Users\me\Projects\

在我的应用程序中,我将给定的项目名称附加到该路径:

C:\Users\me\Projects\myProject

之后,我希望能够将其传递给方法。在此方法中,我还想使用项目名称。解析路径字符串以获取最后一个文件夹名称的最佳方法是什么?

我知道一种解决方法是将路径和项目名称传递给函数,但我希望可以将其限制为一个参数。

【问题讨论】:

你试过了吗? 勉强。我四处搜索,发现了一些类似的问题,但找不到符合我需要的问题。我最好的假设是Path 类对此有一个方法,但我不知道是什么。 只使用一个参数不一定是更好的解决方案。 你的解决方法是什么? 我的答案使用路径方法@McAdam331 【参考方案1】:

如果你像我一样是 Linq 上瘾者,你可能会喜欢这个。无论路径字符串是否终止都有效。

public static class PathExtensions

    public static string GetLastPathSegment(this string path)
    
        string lastPathSegment = path
            .Split(new string[] @"\", StringSplitOptions.RemoveEmptyEntries)
            .LastOrDefault();

        return lastPathSegment;
    

示例用法:

lastSegment = Paths.GetLastPathSegment(@"C:\Windows\System32\drivers\etc");
lastSegment = Paths.GetLastPathSegment(@"C:\Windows\System32\drivers\etc\");

输出: 等等

【讨论】:

也许可以考虑使用 'Path.DirectorySeparatorChar' 而不是 "\"【参考方案2】:
string path = @"C:\Users\me\Projects\myProject";
string result = System.IO.Path.GetFileName(path);

结果 = 我的项目

【讨论】:

如果路径以 "C:\Users\me\Projects\myProject\" 之类的反斜杠结尾,这将不起作用【参考方案3】:

你可以这样做:

string dirName = new DirectoryInfo(@"C:\Users\me\Projects\myProject\").Name;

或者使用Path.GetFileName(有点hack)

string dirName2 = Path.GetFileName(
              @"C:\Users\me\Projects\myProject".TrimEnd(Path.DirectorySeparatorChar));

Path.GetFileName 从路径返回文件名,如果路径以\ 结尾,则返回空字符串,这就是我使用TrimEnd(Path.DirectorySeparatorChar) 的原因

【讨论】:

DirectoryInfo 方法有效。我认为这是首选方法?谢谢! 两者都应该工作,但是 IMO,是的,DirectoryInfo 更干净,更清楚地传达了意图。 我喜欢DirectoryInfo,因为无论它是否以 `\` 结尾,它都能正常工作。在我的应用程序中不应该这样,但为了以防万一,我对它进行了两种测试。它看起来也更干净。 而且,我应该补充一点,是的,两者都有效,但我想我会使用第一个。

以上是关于如何从路径字符串中获取最后一个文件夹?的主要内容,如果未能解决你的问题,请参考以下文章

如何从包含 android 中的绝对文件路径的字符串中获取文件夹名称?

从文件路径字符串中提取带有扩展名的文件名

如何快速从文件路径中获取文件名

用JavaScriptt从一个路径字符串中获取文件名

如何使用 JavaScript 从完整路径中获取文件名?

如何获取 ADLS Gen2 文件的最后修改日期并将其保存到 python 中的 csv