确定以某个字符串开头的子文件夹是否存在

本文关键字:文件夹 是否 存在 开头 字符串 确定以 | 更新日期: 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+"));