【问题标题】:get directory from full path从完整路径获取目录
【发布时间】:2010-10-14 19:46:25
【问题描述】:

如果我有:

C:\temp\foo\bar\

注意:栏是一个目录)

我该如何解析:

条形

【问题讨论】:

  • 栏是文件名还是其他目录?
  • bar 是一个目录。 .我添加了另一个 \ 使其明确
  • Sandman - 我绝对可以手动解析它,但想看看是否有更优雅的解决方案。我不明白你为什么要花 30 分钟搜索是否可以在 SOF 上提出这个问题。现在,下次有人有这个问题时,他们会立即在谷歌上通过搜索找到它
  • leora,我支持你的方法,因为你刚刚为我节省了 15 分钟的字符串解析时间。我是如何在谷歌上发布问题并得到答案的人,节省了我的时间。感谢您提出简单但有用的问题。
  • @Sandman 这不是第一次傲慢的用户告诉某人“只用谷歌搜索”,第一个结果就是那个帖子。

标签: c# directory


【解决方案1】:
string dirname = new DirectoryInfo(path).Name;  
Console.WriteLine(dirname);   

【讨论】:

    【解决方案2】:

    创建新的 DirectoryInfo 实例的最简单方法是使用 Path.GetFileName静态方法。它位于 System.IO 中。

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

    该变量将设置为“Folder2”。

    这比创建 DirectoryInfo 类的新实例效率更高

    【讨论】:

    • 你是对的 - 最后一个反斜杠导致了我在示例中的情况......否则......如广告所示。
    • 为了避免最后一个反斜杠可能返回空字符串的情况,我正在使用 Path.GetDirectoryName(@"C:\Folder1\Folder2");因为它将在上述情况下返回 Folder2 和 Path.GetDirectoryName(@"C:\Folder1\Folder2\");案子。谢谢。
    【解决方案3】:

    只需使用:

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

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

    Link to MSDN Library

    希望这会有所帮助............

    【讨论】:

      【解决方案4】:

      我想通了。

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

      【讨论】:

        【解决方案5】:

        试试

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

        【讨论】:

          【解决方案6】:

          试试这个

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

          【讨论】:

          • 必须在最后检查 `\` 否则返回 foo
          【解决方案7】:

          我可以立即想到 4 种方法

          1

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

          2

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

          3

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

          4

          • 上面有人提到的linq方式

          【讨论】:

            【解决方案8】:

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

            这个值得一提,只是因为它具有“教人钓鱼”的品质——它简短、优雅,由两个独立的东西组成,一旦学会,就可以重新应用于其他问题。

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

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

            【讨论】:

            • 也许使用 (System.IO) PathSeparator 更好?
            • 你从哪里得到Last 方法?林克?但它不会抛出异常,因为拆分结果的大小至少为 1 项。
            【解决方案9】:

            如果上面的答案不能满足您的需求,为什么不从最后一个字符串中提取字符串。

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

            当然,您应该检查一下 originalDirName 是否不以 \ 结尾,以及 originalDirName 是否长于零并且实际上包含 \ 字符。

            【讨论】:

            • 好电话。如果它只是所需路径中的最后一个目录,则比拆分更有效。
            【解决方案10】:

            在 Unix 中,这被称为基本名称,一个快速的 google 想出了这个link for a C# version。我敢肯定还有其他人......

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-10-15
              • 2011-12-11
              • 1970-01-01
              • 2011-09-30
              • 1970-01-01
              • 2014-12-08
              相关资源
              最近更新 更多