如何获取目录名称列表?

时间:2017-12-20 06:06:59

标签: c# regex list

在C#中,

我想要目录名称列表。 类型是列表,我有完整的列表(列表fullPathList)。 fullpathList就是这样..

[0] C:\temp\image\a.jpg;
[1] C:\temp\image\b.bmp;
[2] c:\temp\bin\my.exe;
[3] c:\temp\document\resume.doc;
[4] c:\temp\document\timetable.xlsx;

在这种情况下, 我想要它。

List<string> dirs;
[0] iamge
[1] bin
[2] document

我想如果我使用Regx可能。 但是,我不知道详细的方法。

我该怎么办呢? (不要使用循环语句)

3 个答案:

答案 0 :(得分:3)

我相信这会打印你想要的......

using System.Data;
using System.Diagnostics;
using System.IO;
using System.Linq;

namespace Test {
    class Program {
        static void Main(string[] args) {
            var files = new string[] {
                @"C:\temp\image\a.jpg",
                @"C:\temp\image\b.bmp",
                @"c:\temp\bin\my.exe",
                @"c:\temp\document\resume.doc",
                @"c:\temp\document\timetable.xlsx",
            };
            var dirNames = files.Select(x => new DirectoryInfo(Path.GetDirectoryName(x)).Name);
            Debug.WriteLine($"dirNames={string.Join(",", dirNames)}");
        }
    }
}

Path.GetDirectoryName()返回完整路径和新的DirectoryInfo()。Name只返回路径最后部分的名称。

如果您希望将结果列入清单,请使用...

var dirNames = files.Select(x => new DirectoryInfo(Path.GetDirectoryName(x)).Name).ToList();

答案 1 :(得分:0)

检查此解决方案是否有效。 它获取指定驱动器中的所有目录。 请浏览参考链接ref link

        List<string> dir = new List<string>();
        System.IO.DriveInfo di = new System.IO.DriveInfo(@"D:\");
        System.IO.DirectoryInfo dirInfo = di.RootDirectory;

        System.IO.DirectoryInfo[] dirInfos = dirInfo.GetDirectories("*.*");

        foreach (System.IO.DirectoryInfo d in dirInfos)
        {
            dir.Add(d.Name);
        }

答案 2 :(得分:0)

对于真正的文件系统DirectoryInfo是可行的方法。

如果你有一个真正的文件系统要查询,但有一个类似路径的字符串列表,你可以使用System.IO.Path - Static methods将它们分开像这样:

using System;
using System.Linq;
using System.IO;

public class Program
{
    public static void Main()
    {
        // some strings that are like paths
        var dirs = new[] 
        {
            @"C:\temp\image\a.jpg", @"C:\temp\image\b.bmp", @"c:\temp\bin\my.exe", 
            @"c:\temp\document\resume.doc", @"c:\temp\document\timetable.xlsx"
        };

        // this will use a static method to extract only the path-part
        var fullDirs = dirs.Select(d => Path.GetDirectoryName(d)).ToList();

        // this will use the same method but split the result at the default systems
        // path-seperator char and use only the last part, only uses distinct values
        var lastDirsDistinct = dirs.Select(d => Path.GetDirectoryName(d)
                    .Split(Path.DirectorySeparatorChar).Last()
                ).Distinct().ToList();

        // joins the list with linebreaks and outputs it
        Console.WriteLine(string.Join("\n", fullDirs));

        // joins the list with linebreaks and outputs it            
        Console.WriteLine(string.Join("\n", lastDirsDistinct ));
    }
}

输出:

C:\temp\image
C:\temp\image
c:\temp\bin
c:\temp\document
c:\temp\document
image
bin
document