如何获取目录名称

时间:2014-10-14 15:35:00

标签: 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);
        }
    }

但它没有获取目录名称。例如:“NewFolder1”,获取:“D:\ aaa \ bbbb \ cccc \ dddd \ NewFolder1”

我只获得目录名称。

8 个答案:

答案 0 :(得分:11)

这应该有效:

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 的路线进行测试。

答案 1 :(得分:1)

目前您正在使用Directory.GetDirectories,它将返回string[],其中包含目录的完整路径。而是使用DirectoryInfo类,稍后您可以使用属性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来包含所有子目录。

答案 2 :(得分:1)

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

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);
    }
}

答案 3 :(得分:1)

我们少使用linq

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

小菜一碟:D

答案 4 :(得分:1)

有一个简单的单线:

owner

答案 5 :(得分:0)

  

但它没有获取目录名称。例如:" NewFolder1",得到:" D:\ aaa \ bbbb \ cccc \ dddd \ NewFolder1"。

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

您可以使用DirectoryInfo.Name

string dir = @"D:\aaa\bbbb\cccc\dddd\NewFolder1";
DirectoryInfo dirInfo = new DirectoryInfo(dir);
string nameOfDirOnly = dirInfo.Name; // NewFolder1

ListBox1.Items.Add(nameOfDirOnly);

答案 6 :(得分:0)

这里有一些适合你的东西......

    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;
    }

答案 7 :(得分:0)

这对我也有用:

var directoryName = Path.GetFileName(directoryPath);