确定以某个字符串开头的子文件夹是否存在
本文关键字:文件夹 是否 存在 开头 字符串 确定以 | 更新日期: 2023-09-27 18:02:23
我想知道某个文件夹是否有以特定名称开头的子文件夹
例如。
在我的C:'Test文件夹中,我有GUI, TCP, PLC, PLC_1, PLC_2等文件夹…PLC_n .
我可能有也可能没有PLC_文件夹。我想检查一下这些文件夹是否存在。如果它们存在,我想提取所有这些文件夹的名称
可以使用Directory.GetDirectories
的过载
string[] plcDirs = Directory.GetDirectories(@"C:'Test", "PLC*", SearchOption.TopDirectoryOnly);
if(plcDirs.Any())
{
// ...
}
如果有很多子目录,使用延迟执行的EnumerateDirectories
更有效,它不需要在开始处理之前将所有加载到内存中:
var plcDirs = Directory.EnumerateDirectories(@"C:'Test", "PLC*", SearchOption.TopDirectoryOnly);
MSDN:
EnumerateDirectories和GetDirectories方法的区别如下:当您使用EnumerateDirectories时,您可以开始枚举返回整个集合之前的名称集合;当你如果使用GetDirectories,则必须等待整个名称数组被调用在访问数组之前返回。因此,当你是EnumerateDirectories可以与许多文件和目录一起工作更有效率。
可以通过以下方式遍历子文件夹:
DirectoryInfo folder = new DirectoryInfo(path);
DirectoryInfo[] subfolders = directory.GetDirectories();
foreach(DirectoryInfo subfolder in subfolders)
{
//TODO: add logic here for your check. e.g.
if (subfolder.name.StartsWith(somestring))
{
//TODO:
}
}
使用以下命令,您可以使用searchpattern搜索文件夹和子文件夹。它是最可靠的,因为当适当的权限不正确时,gettall有时会失败。
快速获取指定路径下的所有文件和目录
如果要查找的子目录的名称模式比较复杂,可以使用Regex:
var subdirs = Directory.GetDirectories(@"C:'Test")
.Where(dir => Regex.IsMatch(dir, @"PLC_'d+"));