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