C#搜索具有特定名称的文件夹的基本文件夹和子目录

时间:2015-06-17 15:18:20

标签: c# getdirectories system.io.directory

我有一个系统托盘应用程序,它使用ContextMenus根据SQL结果集动态创建文件夹列表。

生成SQL结果集后,将返回活动任务列表。然后,应用程序使用for循环为结果集中的每个活动任务生成ToolStripMenuItem。

这是我开始挣扎的地方。我一直在寻找一段时间,以便让用户能够打开这些动态创建的文件夹。

我创建了一个由发件人控制的on click事件处理程序,但是我无法想到找到所创建文件夹的文件路径的正常(工作)方式。

我有一个基本文件夹,让我们说“C:\”有两个子文件夹,2014年和2015年。我需要我的应用程序点击文件夹名称并搜索“C:\”和子文件夹中的实际文件夹“C:\”,然后使用process.start打开它。

我首先使用System.IO.Directory.GetDirectories为每个循环创建一个,但是这似乎只找到第一组文件夹(EG:2014,2015),即使使用SearchOption.AllDirectories方法重载也是如此。代码示例:

string path2 = @"C:\";
foreach (string dir in System.IO.Directory.GetDirectories(path2, SearchOption.AllDirectories))
    {
        if (new DirectoryInfo(dir).Name.Contains(test))
        {
            MessageBox.Show(dir);
        }
    }

任何人都可以提供一些关于如何搜索包含预定义字符串的文件夹和子文件夹(不一定能完成整个文件夹路径)的想法,以便可以返回完整的文件路径吗?

由于

2 个答案:

答案 0 :(得分:1)

要获取所有子文件夹,您可以使用此代码

DirectoryInfo dirInfo = new DirectoryInfo(@"Path to Folder");
DirectoryInfo[] subFolders = dirInfo.GetDirectories();

然后搜索每个子文件夹,如果名称是2014或2015或其他......

答案 1 :(得分:1)

老实说,我甚至不确定你的代码是如何编译的,因为在我的C#中,Directory.GetDirectories(...)没有重载需要stringSearchOption

在我看来,你不需要递归,但实际上只需要使用Directory.GetDirectories的特定重载:

string path2 = @"C:\";
foreach (string dir in Directory.GetDirectories(path2, test, SearchOption.AllDirectories))
{
    // do what you want with dir.
}

对于名称与path2匹配的test中的每个目录和子目录,这样说"执行..."。