【问题标题】:Get folder name from full file path从完整文件路径获取文件夹名称
【发布时间】:2011-07-10 21:36:37
【问题描述】:

如何从应用程序的完整路径中获取文件夹名称?

这是下面的文件路径,

c:\projects\root\wsdlproj\devlop\beta2\text

这里的“文本”是文件夹名称。

如何从该路径获取该文件夹名称?

【问题讨论】:

    标签: c# directory


    【解决方案1】:

    试试这个

    var myFolderName = @"c:\projects\roott\wsdlproj\devlop\beta2\text";
    var result = Path.GetFileName(myFolderName);
    

    【讨论】:

    • 如果你有一个文件名到字符串,它也返回文件名
    • 在这种情况下,文本是(无扩展名的)文件名。我认为这就是OP所追求的。如果它是文件夹或文件名实际上并不重要。如果字符串不包含文件名,这段代码会给他他所追求的。
    • 除非路径以 \ 结尾,像这样:@"c:\projects\roott\wsdlproj\devlop\beta2\text\"
    • 这不适用于文件夹。我得到一个空白字符串。必须有一个文件存在
    • 如果文件夹路径不包含尾部反斜杠(例如从Path.GetDirectoryName() 返回的文件夹路径),则此方法工作得很好。不过,该函数的名称 GetFileName() 有点误导。
    【解决方案2】:

    DirectoryInfo.Name:

    string dirName = new DirectoryInfo(@"c:\projects\roott\wsdlproj\devlop\beta2\text").Name;
    

    【讨论】:

    • 这是否要求该文件夹实际存在于文件系统中(如果文件夹“c:\ projects\root\wsdlproj\devlop\beta2\text" (当前)不存在于文件系统中)?
    • @PeterMortensen,没有。我刚刚对此进行了测试,该方法从字符串中返回最低级别文件夹的名称,即使文件夹路径不存在。
    • 谢谢,很好的回答。但是我有点疑惑 System.IO.Directory 不支持这样的操作。
    • @anhoppe - 我同意。我看到的另一个选项是 Path.GetDirectoryName msdn.microsoft.com/en-us/library/… -- 但要到明天才能测试它。
    【解决方案3】:

    你可以用这个:

    string path = @"c:\projects\roott\wsdlproj\devlop\beta2\text";
    string lastDirectory = path.Split(new char[] { System.IO.Path.DirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries).Last();
    

    【讨论】:

    • 如果路径看起来像这样会怎样:@"c:\projects\roott\wsdlproj\devlop\beta2\text\",所以需要额外的 DirectorySeparatorChar
    • @Alex - 我修改了我的代码以使其也适用于这些路径。 StringSplitOptions.RemoveEmptyEntries 成功了。
    • 根据msdn.microsoft.com/en-us/library/…,如果没有给出所需的权限,FileInfo 可以抛出异常。
    【解决方案4】:

    我认为您想从文件路径中获取父文件夹名称。很容易得到。 一种方法是创建一个FileInfo 类型的对象并使用它的Directory 属性。

    例子:

    FileInfo fInfo = new FileInfo("c:\projects\roott\wsdlproj\devlop\beta2\text\abc.txt");
    
    String dirName = fInfo.Directory.Name;
    

    【讨论】:

      【解决方案5】:
      Path.GetDirectoryName(@"c:\projects\roott\wsdlproj\devlop\beta2\text");
      

      MSDN: Path.GetDirectoryName Method

      【讨论】:

      • 这将返回 c:\projects\roott\wsdlproj\devlop\beta2,这不是 OP 所追求的。
      【解决方案6】:

      在这种情况下,您要获取的文件存储在 strpath 变量中:

      string strPath = Server.MapPath(Request.ApplicationPath) + "/contents/member/" + strFileName;
      

      【讨论】:

        【解决方案7】:

        这样也可以;

        var directoryName = System.IO.Path.GetFileName(@"c:\projects\roott\wsdlproj\devlop\beta2\text");
        

        【讨论】:

        • 这将返回一个空字符串
        • @disklosr - 刚刚用 ScriptCs 测试过,它返回 'text'
        • 如果文件夹路径不包含尾部反斜杠(例如从Path.GetDirectoryName() 返回的文件夹路径),则此方法工作得很好。不过,该函数的名称 GetFileName() 有点误导。
        【解决方案8】:

        我认为除了进入文件系统来找出 text.txt 是目录还是文件之外别无他法。如果你想要一些简单的东西,也许你可以使用:

        s.Substring(s.LastIndexOf(@"\"));
        

        【讨论】:

        • 为了避免字符串前面的斜线:s.Substring(s.LastIndexOf(@"\") + 1);
        【解决方案9】:

        这是一种对我有用的替代方法,无需创建 DirectoryInfo 对象。关键是GetFileName() 在路径中没有斜杠时有效。

        var name = Path.GetFileName(path.TrimEnd(Path.DirectorySeparatorChar));
        

        例子:

        var list = Directory.EnumerateDirectories(path, "*")
                .Select(p => new
                {
                    id = "id_" + p.GetHashCode().ToString("x"),
                    text = Path.GetFileName(p.TrimEnd(Path.DirectorySeparatorChar)),
                    icon = "fa fa-folder",
                    children = true
                })
                .Distinct()
                .OrderBy(p => p.text);
        

        【讨论】:

          【解决方案10】:

          只需使用Path.GetFileName

          这里 - 从文件夹的完整路径中提取文件夹名称:

          string folderName = Path.GetFileName(@"c:\projects\root\wsdlproj\devlop\beta2\text");//Return "text"
          

          这是一些额外的 - 从文件的完整路径中提取文件夹名称:

          string folderName = Path.GetFileName(Path.GetDirectoryName(@"c:\projects\root\wsdlproj\devlop\beta2\text\GTA.exe"));//Return "text"
          

          【讨论】:

            【解决方案11】:

            基于previousanswers(但已修复)

            using static System.IO.Path;
            
            var dir = GetFileName(path?.TrimEnd(DirectorySeparatorChar, AltDirectorySeparatorChar));
            

            GetFileName from .NET source的解释:

            返回给定路径的名称和扩展部分。所结果的 字符串包含路径的最后一个字符 反斜杠 ("\")、斜杠 ("/") 或冒号 (":") 字符 小路。结果字符串是整个路径,如果路径 删除尾部斜杠、斜杠或冒号字符后不包含反斜杠。所结果的 如果路径为空,则字符串为空。

            【讨论】:

              猜你喜欢
              • 2011-04-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-04-21
              • 2011-01-25
              • 2016-01-31
              • 2021-01-06
              相关资源
              最近更新 更多