我想知道某个文件夹是否包含以特定名称开头的子文件夹。
对于例如。
在我的C:\ Test文件夹中,我有GUI,TCP,PLC,PLC_1,PLC_2 ...... PLC_n等文件夹。
我可能有也可能没有PLC_文件夹。我想检查这些文件夹是否存在。如果它们存在,我想提取所有这些文件夹的名称。
答案 0 :(得分:6)
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有时会失败。
答案 3 :(得分:0)
如果要找到的子目录的名称模式更复杂,可以使用Regex:
var subdirs = Directory.GetDirectories(@"C:\Test")
.Where(dir => Regex.IsMatch(dir, @"PLC_\d+"));