【问题标题】:get all the nested folders names (no path) from a path [duplicate]从路径中获取所有嵌套文件夹名称(无路径)[重复]
【发布时间】:2020-03-16 09:24:57
【问题描述】:

我有点困惑如何从给定路径获取嵌套文件夹名称。许多文件夹可能没有文件夹。

这就是我所做的。我也尝试过子字符串,但后来我得到了 1 个返回的结果,并且整个文件都是一样的。

foreach (string fL in GetDirectories(targetDirectory))
            {
                foreach (string fN in ProcessDirectory(fL))
                {
                    string[] subType = Directory.GetDirectories(directory);

                    myDocs.Add(new Documents
                    {
                        Id = "1",
                        Directory = directory,
                        Type = type,
                        FilePath = filePath,
                        FileName = fN,
                        Description = description,
                        SubType = subType
                    });
                }
            }

我得到的输出如下:

{
    "Id": "1",
    "Directory": "C:/aaa/bbb/ccc/ddd/eee",
    "Type": "QA",
    "FilePath": "C:/aaa/bbb/ccc/ddd/eee/New Text Document.txt",
    "FileName": "New Text Document.txt",
    "Description": "New Text Document",
    "SubType": [
        "C:/aaa/bbb/ccc/ddd/eee\\New folder",
        "C:/aaa/bbb/ccc/ddd/eee\\New folder - Copy",
        "C:/aaa/bbb/ccc/ddd/eee\\New folder - Copy (2)",
        "C:/aaa/bbb/ccc/ddd/eee\\New folder - Copy (3)",
        "C:/aaa/bbb/ccc/ddd/eee\\New folder - Copy (4)",
        "C:/aaa/bbb/ccc/ddd/eee\\New folder - Copy (5)",
        "C:/aaa/bbb/ccc/ddd/eee\\New folder - Copy (6)",
        "C:/aaa/bbb/ccc/ddd/eee\\New folder - Copy (7)",
        "C:/aaa/bbb/ccc/ddd/eee\\New folder - Copy (8)",
        "C:/aaa/bbb/ccc/ddd/eee\\New folder - Copy (9)"
    ]
}

想要的结果:

{
    "Id": "1",
    "Directory": "C:/aaa/bbb/ccc/ddd/eee",
    "Type": "QA",
    "FilePath": "C:/aaa/bbb/ccc/ddd/eee/New Text Document.txt",
    "FileName": "New Text Document.txt",
    "Description": "New Text Document",
    "SubType": [
        "New folder",
        "New folder - Copy",
        "New folder - Copy (2)",
        "New folder - Copy (3)",
        "New folder - Copy (4)",
        "New folder - Copy (5)",
        "New folder - Copy (6)",
        "New folder - Copy (7)",
        "New folder - Copy (8)",
        "New folder - Copy (9)"
    ]
}

【问题讨论】:

  • 这是在 Windows 上吗?我从未见过Directory.GetDirectory() 带有正斜杠的返回路径。
  • @SimonC 不幸的是,它没有。我需要将它放在一个数组中,因为我将有一个文件夹,其中嵌套了许多文件夹,我需要获取这些嵌套文件夹的名称并将其存储在一个数组中。我已经尝试过了,但也许我执行错了:(
  • @TanveerBadar 正确的是 Windows,我用“/”替换了“\\”。

标签: c# .net


【解决方案1】:

您可以使用Path.GetFileName() 从完整路径中获取目录的名称。是的,它叫做 GetFileName,但实际上就是 takes everything after the last slash。 (它实际上并不查看文件系统)

如果你可以使用 Linq,你可以这样做:

string[] subType = Directory.GetDirectories(directory)
                            .Select(Path.GetFileName).ToArray();

【讨论】:

  • 只需将using System.Linq; 添加到文件顶部即可。 Linq 的Select 真的和foreach 循环一样。
  • 只是出于好奇,你为什么提到你是否可以使用 Linq?
  • 我认为没有人会反对在这里使用它。但有时,在更复杂的语句中,与foreach 循环相比,很难理解它实际在做什么。
猜你喜欢
  • 1970-01-01
  • 2011-01-25
  • 1970-01-01
  • 2011-04-13
  • 2014-04-08
  • 2011-07-10
  • 1970-01-01
相关资源
最近更新 更多