【问题标题】: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

标签: c# parsing filepath


【解决方案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,因为无论它是否以 `\` 结尾,它都能正常工作。在我的应用程序中不应该这样,但为了以防万一,我对它进行了两种测试。它看起来也更干净。
  • 而且,我应该补充一点,是的,两者都有效,但我想我会使用第一个。
猜你喜欢
  • 2023-04-03
  • 1970-01-01
  • 2014-12-11
  • 2016-03-08
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
  • 2019-09-04
  • 1970-01-01
相关资源
最近更新 更多