【问题标题】:Get folder depth from a virtual path从虚拟路径获取文件夹深度
【发布时间】:2013-10-17 08:27:19
【问题描述】:

我正在尝试从给定路径获取文件夹位置 它自己的路径不可访问,因此我不能使用DirectoryDirectoryInfoReference post

结果应该是这样的:

  1. C:\ 返回 -1
  2. c:\FolderA 返回 0
  3. c:\FolderA\FolderB 返回 1

我正在使用以下内容,但 1 和 2 之间的结果是相同的 :-(:

  public static int GetFolderLevelDepth(string fullPath)
        {
            if(string.IsNullOrEmpty(fullPath))
            {
                return -99;
            }
            int result = fullPath.Count(x => x == '\\');
            return result -2;
        }

测试:

[Test]
    public void Get_Level_Root_Depth_Test()
    {
        var result = StringModifier.GetFolderLevelDepth("c:\\");
        Assert.AreEqual(-1,result);
    }
    [Test]
    public void Get_Level_One_Depth_Test()
    {
        var result = StringModifier.GetFolderLevelDepth("c:\\Folder1");
        Assert.AreEqual(0, result);
    }
    [Test]
    public void Get_Level_Two_Depth_Test()
    {
        var result = StringModifier.GetFolderLevelDepth("c:\\Folder1\\Folder2");
        Assert.AreEqual(1, result);
    }

【问题讨论】:

    标签: c# .net-3.5


    【解决方案1】:

    此代码应考虑最可能的输入条件:

    int res = -99;
    string input = fullPath.Trim();
    if (input.Length > 0 && input.Contains(@"\"))
    {
        if (input.Substring(input.Length - 1, 1) == @"\") input = input.Substring(0, input.Length - 1);
        res = input.Split('\\').Length - 2;
    }
    return res;
    

    【讨论】:

    • @Maro 是的(我认为你可能需要那个):)
    【解决方案2】:
    fullPath = fullPath.Trim();
    if (fullPath[fullPath.Length - 1] != '\\')
        return fullPath.Count(x => x == '\\') - 1;
    return fullPath.Count(x => x == '\\') - 2;
    

    或者:

    return fullPath.Split('\\').Length - 2
    

    【讨论】:

      【解决方案3】:

      你可以这样做:

      result = fullPath.Split('\\', StringSplitOptions.RemoveEmptyEntries).Length;
      

      StringSplitOptions.RemoveEmptyEntries 如果路径以反斜杠结尾,则会丢弃最后一个条目;这会导致代码最后不计算“空目录名”。

      请注意,此代码不会考虑 当前目录 (.) 和 父目录 (..) 特殊目录。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-30
        • 2020-08-19
        • 2017-11-03
        • 1970-01-01
        • 2010-09-23
        • 2015-05-04
        相关资源
        最近更新 更多