C# 如何获取目录名

C# 如何获取目录名,c#,asp.net,C#,Asp.net,我将此代码用于获取目录名称: void DirSearch(string sDir) { foreach (var d in System.IO.Directory.GetDirectories(sDir)) { ListBox1.Items.Add(System.IO.Path.GetDirectoryName(d)); DirSearch(d); } } 但它不能获取目录名。例如

我将此代码用于获取目录名称:

void DirSearch(string sDir)
    {
        foreach (var d in System.IO.Directory.GetDirectories(sDir))
        {
            ListBox1.Items.Add(System.IO.Path.GetDirectoryName(d));
            DirSearch(d);
        }
    }
但它不能获取目录名。例如:“NewFolder1”,获取:“D:\aaa\bbbb\cccc\ddddd\NewFolder1”

我只有一个目录名

但它不能获取目录名。例如:“NewFolder1”,获取:“D:\aaa\bbbb\cccc\ddddd\NewFolder1”

返回目录的完整路径(它也可用于文件),但您只需要最后一部分,所以在您的示例中是
NewFolder1

你可以用

当前您正在使用,它将返回一个
字符串[]
,该字符串将包含目录的完整路径。以后可以使用属性
DirectoryInfo.Name
只获取目录的名称,而不获取完整路径,如:

void DirSearch(string sDir)
{
    DirectoryInfo dirInfo = new DirectoryInfo(sDir);
    foreach (var d in dirInfo.GetDirectories("*", SearchOption.AllDirectories))
    {
        ListBox1.Items.Add(d.Name);
    }
}
似乎您也在尝试递归搜索所有子目录,您可以在代码中使用
SearchOption.AllDirectories
来包括所有子目录

这应该有效:

foreach (var d in System.IO.Directory.GetDirectories(@"C:\"))
        {
            var dir = new DirectoryInfo(d);
            var dirName = dir.Name;

            ListBox1.Items.Add(dirName);
        }
还有,你可以走捷径

foreach (var d in System.IO.Directory.GetDirectories(@"C:\"))
        {
            var dirName = new DirectoryInfo(d).Name;
            ListBox1.Items.Add(dirName);
        }

我刚刚使用了C的方法进行测试。

这里有一些东西对你有用

    public IEnumerable<string> GetDirInfoFast(string dir, string pattern)
    {
        //you should put try catch here....
        var di = new DirectoryInfo(dir);
        var list = new List<string>();
        //put in the pattern
        var dirs = di.GetDirectories(pattern);
        Parallel.ForEach(dirs, p => {
            list.Add(p.Name);
        });
        return list;
    }
public IEnumerable GetDirInfoFast(字符串目录,字符串模式)
{
//你应该在这里放上试抓。。。。
var di=新目录信息(dir);
var list=新列表();
//摆出模式
var dirs=di.GetDirectories(模式);
Parallel.ForEach(dirs,p=>{
列表。添加(p.名称);
});
退货清单;
}

如果您不想创建
DirectoryInfo
FileInfo
类,这些类有时会导致错误并引入额外的开销,您可以这样做:

void DirSearch(string sDir)
{
    foreach (var d in System.IO.Directory.GetDirectories(sDir))
    {
        ListBox1.Items.Add(d.TrimEnd(Path.DirectorySeparatorChar).Split(Path.DirectorySeparatorChar).Last());
        DirSearch(d);
    }
}
它的速度也快了一点,这取决于你正在搜索的目录的数量和大小

如果您不需要跨平台/始终可以保证文件系统有一个斜杠分隔符,那么您可以使它稍微“短一些”/不太冗长

void DirSearch(string sDir)
{
    foreach (var d in System.IO.Directory.GetDirectories(sDir))
    {
        ListBox1.Items.Add(d.TrimEnd('\\').Split('\\').Last());
        DirSearch(d);
    }
}

这也适用于我:

var directoryName = Path.GetFileName(directoryPath);

我们用little
linq
怎么样

ListBox1.Items.AddRange(System.IO.Directory.GetDirectories(@"C:\").Select(x => new DirectoryInfo(x).Name).ToArray());

小菜一碟:D

有一个简单的单行线:

Directory.GetDirectories(PathToFolder).Select(d => new DirectoryInfo(d).Name);

@Andrei,为此,OP必须使用
DirectoryInfo
类,当前为
目录。GetDirectories
将返回一个
字符串[]
,该字符串将包含完整路径。。你还应该提到为什么这解决了OP的问题。你的观点很好。然而,当我设计任何东西时,我总是想把一些东西放进可重用的库中,上面的模式是好的,但我承认当有数千个目录时,它会更好。我昨天回答了一个问题,OP使用这种模式将处理减少了4倍。而且,我也是LINQ的粉丝。我试着写这些类型的答案来向大家介绍LINQ,因为,嗯,这太棒了!
Directory.GetDirectories(PathToFolder).Select(d => new DirectoryInfo(d).Name);