Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取目录名列表?_C#_Regex_List - Fatal编程技术网

C# 如何获取目录名列表?

C# 如何获取目录名列表?,c#,regex,list,C#,Regex,List,在C#中 我想要目录名列表。 类型是List,我有完整的pah列表(List 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; [

在C#中

我想要目录名列表。 类型是List,我有完整的pah列表(List 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
List目录;
[0]iamge
[1] 垃圾箱
[2] 文件
如果我使用Regx,我想这是可能的。 但是,我不知道具体的方法

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

我相信这会打印出您想要的内容

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)}");
        }
    }
}
GetDirectoryName()返回完整路径和新的DirectoryInfo()。Name只返回路径最后一部分的名称

如果要将结果显示在列表中,请使用

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

我相信这是你想要的

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)}");
        }
    }
}
GetDirectoryName()返回完整路径和新的DirectoryInfo()。Name只返回路径最后一部分的名称

如果要将结果显示在列表中,请使用

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

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

List dir=new List();
System.IO.DriveInfo di=新的System.IO.DriveInfo(@“D:\”);
System.IO.DirectoryInfo dirInfo=di.RootDirectory;
System.IO.DirectoryInfo[]dirInfos=dirInfo.GetDirectories(“*”);
foreach(dirInfos中的System.IO.DirectoryInfo d)
{
地址(d.姓名);
}

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

List dir=new List();
System.IO.DriveInfo di=新的System.IO.DriveInfo(@“D:\”);
System.IO.DirectoryInfo dirInfo=di.RootDirectory;
System.IO.DirectoryInfo[]dirInfos=dirInfo.GetDirectories(“*”);
foreach(dirInfos中的System.IO.DirectoryInfo d)
{
地址(d.姓名);
}
对于一个真正的文件系统来说是一条出路

如果您没有要查询的实际文件系统,但有一个字符串列表,这些字符串类似于路径,您可以使用这些路径将它们按如下方式拆分:

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
对于一个真正的文件系统来说,这是一个不错的选择

如果您没有要查询的实际文件系统,但有一个字符串列表,这些字符串类似于路径,您可以使用这些路径将它们按如下方式拆分:

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

var dirNames=files.Select(x=>newdirectoryinfo(Path.GetDirectoryName(x)).Name.Distinct().ToList();//add Distinct()谢谢。但是如果它有子目录,它就不工作了?不管使用了多少子目录,代码都应该工作。如果路径为“c:\temp\a\b\c\d\e\image\x.jpg”,则代码应返回“image”;如果路径为“c:\image\x.jpg”,则代码应返回“image”。var dirNames=files.Select(x=>newdirectoryinfo(path.GetDirectoryName(x)).Name.Distinct().ToList();//add Distinct()谢谢。但是如果它有子目录,它就不工作了?不管使用了多少子目录,代码都应该工作。如果路径为“c:\temp\a\b\c\d\e\image\x.jpg”,代码应返回“image”;如果路径为“c:\image\x.jpg”,代码应返回“image”。\u不要使用循环语句:作业的典型限制?我猜您没有“真正的”文件系统可以查询,但是有一个类似于上面的字符串“examle”列表?在这个前提下,对我的答案进行了调整,以处理字符串。您可能不想使用Linq计数作为“循环语句”进行签入。如果是这样,您可以使用foreach、for、while、do-while或任何允许您使用的内容来重新编写它。\u don't use loop语句:家庭作业的典型限制?我猜您没有“真正的”文件系统可以查询,但是有一个类似于上面的字符串“examle”列表?在这个前提下,对我的答案进行了调整,以处理字符串。您可能不想使用Linq计数作为“循环语句”进行签入。如果是这样的话,您可以使用foreach、for、while、do-while或允许您使用的任何东西重新编写它