0

我正在尝试从给定路径获取文件夹位置它自身的路径不可访问,因此我无法使用DirectorynorDirectoryInfo参考帖子

结果应该是这样的:

  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);
    }
4

3 回答 3

2

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

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;
于 2013-10-17T08:35:13.997 回答
1

你可以这样做:

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

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

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

于 2013-10-17T08:38:09.653 回答
1
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
于 2013-10-17T08:30:01.423 回答