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

时间:2014-05-08 08:00:31

标签: c#

我想知道某个文件夹是否包含以特定名称开头的子文件夹。

对于例如。

在我的C:\ Test文件夹中,我有GUI,TCP,PLC,PLC_1,PLC_2 ...... PLC_n等文件夹。

我可能有也可能没有PLC_文件夹。我想检查这些文件夹是否存在。如果它们存在,我想提取所有这些文件夹的名称。

4 个答案:

答案 0 :(得分:6)

您可以使用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可以   效率更高。

答案 1 :(得分:0)

您可以通过以下方式遍历子文件夹:

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

答案 2 :(得分:0)

使用以下内容,您可以使用searchpattern搜索文件夹和子文件夹。它是最可靠的,因为当适当的权限不正确时,GetAll有时会失败。

Get all files and directories in specific path fast

答案 3 :(得分:0)

如果要找到的子目录的名称模式更复杂,可以使用Regex:

var subdirs = Directory.GetDirectories(@"C:\Test")
                       .Where(dir => Regex.IsMatch(dir, @"PLC_\d+"));