从虚拟路径获取文件夹深度

时间:2013-10-17 08:27:20

标签: c# .net-3.5

我试图从给定路径获取文件夹位置 它本身的路径无法访问,因此我无法使用DirectoryDirectoryInfoReference post

结果应该是这样的:

  1. C:\ 返回 -1
  2. c:\ FolderA 返回 0
  3. c:\ FolderA \ FolderB 返回 1
  4. 我使用以下内容但是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);
        }
    

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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

答案 2 :(得分:1)

你可以这样做:

result = fullPath.Split('\\', StringSplitOptions.RemoveEmptyEntries).Length;
如果路径以反斜杠结尾,

StringSplitOptions.RemoveEmptyEntries会导致它丢弃最后一个条目;这导致代码不计算最后的“空目录名称”。

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