【问题标题】:Identify whether a subfolder starting with a certain string exists or not [duplicate]确定是否存在以某个字符串开头的子文件夹[重复]
【发布时间】:2014-05-08 08:00:31
【问题描述】:

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

例如。

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

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

【问题讨论】:

标签: c#


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      Get all files and directories in specific path fast

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2015-11-10
          • 2012-02-15
          • 1970-01-01
          • 2014-12-02
          • 2013-09-04
          • 2013-05-13
          • 2018-08-07
          • 2018-12-27
          • 2012-01-22
          相关资源
          最近更新 更多