【问题标题】:Get the (last part of) current directory name in C#在 C# 中获取当前目录名称的(最后一部分)
【发布时间】:2011-08-26 11:21:42
【问题描述】:

我需要获取当前目录的最后一部分,例如从/Users/smcho/filegen_from_directory/AIRPassthrough,我需要获取AIRPassthrough

用python,我可以用这段代码得到它。

import os.path

path = "/Users/smcho/filegen_from_directory/AIRPassthrough"
print os.path.split(path)[-1]

或者

print os.path.basename(path)

如何用 C# 做同样的事情?

添加

在回答者的帮助下,我找到了我需要的东西。

using System.Linq;
string fullPath = Path.GetFullPath(fullPath).TrimEnd(Path.DirectorySeparatorChar);
string projectName  = fullPath.Split(Path.DirectorySeparatorChar).Last();

string fullPath = Path.GetFullPath(fullPath).TrimEnd(Path.DirectorySeparatorChar);
string projectName = Path.GetFileName(fullPath);

【问题讨论】:

标签: c# string filepath


【解决方案1】:

你可以试试:

var path = @"/Users/smcho/filegen_from_directory/AIRPassthrough/";
var dirName = new DirectoryInfo(path).Name;

【讨论】:

  • 我比选择的答案更喜欢这个。 (Ab)使用 GetFileName 在语义上是错误的,因为它是您要检索的目录。此外,要使 GetFileName 具有确定性意味着您必须考虑尾随正斜杠或反斜杠的可能性,并将其修剪掉,这很难看。
  • var dirName = new DirectoryInfo(Path.GetDirectoryName(pathWithFilename)).Name //更好
  • @kernowcode 我相信这会按照 OP 的要求返回“filegen_from_directory”而不是“AIRPassthrough”。
  • @SimonBrangwin 我以为 Linux 中的一切都是文件 :)
【解决方案2】:

您正在寻找Path.GetFileName
请注意,如果路径以\ 结尾,这将不起作用。

【讨论】:

  • @anti:错误;我尝试过这个。字符串是字符串。如果您不相信我,请将Path.GetFileName("/Users/smcho/filegen_from_directory/AIRPassthrough") 粘贴到 LINQPad 中。
  • @antisanity 不,它会返回目录名称,但它可能不是问题所在。
  • @Light:它确实有效;试试吧。 Path 类处理这两个分隔符。
  • 要使用 Directory.GetDirectories 检索到的目录,请使用:string directoryName = Path.GetFileName(directory.TrimEnd(Path.DirectorySeparatorChar));
  • 如果你想要一个目录而不是文件名怎么办?
【解决方案3】:

这是一个略有不同的答案,具体取决于您拥有什么。如果您有一个文件列表并且需要获取文件所在的最后一个目录的名称,您可以这样做:

string path = "/attachments/1828_clientid/2938_parentid/somefiles.docx";
string result = new DirectoryInfo(path).Parent.Name;

这将返回“2938_parentid”

【讨论】:

    【解决方案4】:

    好吧,准确地回答你的问题标题:-)

    var lastPartOfCurrentDirectoryName = 
       Path.GetFileName(Environment.CurrentDirectory);
    

    【讨论】:

      【解决方案5】:

      与其使用'/'来调用split,不如使用Path.DirectorySeparatorChar

      像这样:

      path.split(Path.DirectorySeparatorChar).Last() 
      

      【讨论】:

      • 我不喜欢使用此解决方案的一件事是它假设字符串来自何处。如果他们在 Windows 系统上阅读 *nix 日志怎么办?然后将使用错误的字符,您将得到整个路径,而不是预期的效果。只是我的 2 美分。
      • 我同意你的看法。 OP 说“当前目录的最后一部分”,所以这很好。
      【解决方案6】:
      var lastFolderName = Path.GetFileName(
          path.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar));
      

      如果路径恰好包含正斜杠分隔符或反斜杠分隔符,则此方法有效。

      【讨论】:

      • .TrimEnd() 的应用位置不正确。它应该应用于 path,而不是 Path.GetFileName。查看@Fatlad 的答案
      【解决方案7】:

      试试这个:

      String newString = "";
      String oldString = "/Users/smcho/filegen_from_directory/AIRPassthrough";
      
      int indexOfLastSlash = oldString.LastIndexOf('/');
      
      newString = oldString.Substring(indexOfLastSlash, oldString.Length);
      

      代码可能已关闭(我还没有测试过),但这个想法应该可行。

      【讨论】:

        【解决方案8】:

        这对我来说非常好:)

        Path.GetFileName(path.TrimEnd('\\')
        

        【讨论】:

          【解决方案9】:

          您也可以使用 Uri 类。

          new Uri("file:///Users/smcho/filegen_from_directory/AIRPassthrough").Segments.Last()
          

          如果您想获得一些其他细分,或者如果您想对一个网址做同样的事情,您可能更喜欢使用这个类。

          【讨论】:

            【解决方案10】:

            你可以试试下面的代码:

            Path.GetFileName(userpath)

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-04-17
              • 1970-01-01
              • 1970-01-01
              • 2017-09-05
              • 1970-01-01
              • 2020-07-16
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多