我想 select 一个想要的文件夹,我希望它有条件地自动搜索该目录中的所有其他文件夹 C#

I want to select a desired folder and I want it to automatically search through all other folders within that directory conditionally C#

所以这是我想要 select 的文件夹: Selected Folder using FBD

在该 BackPath 文件夹中还有其他 7 个日期文件夹,如下所示: Dated Folders within selected folder

在每个带日期的文件夹中还有两个文件夹,分别命名为 "In" 和 "Out"。

我想要做的只是 select BackPath 文件夹,然后当我 运行 我的导入方法时,我希望它搜索每个有日期的文件夹并且只查看 "Out" 个文件夹并忽略每个 "In" 个文件夹。

这是我的 chooseInputFolder 方法:

private void ChooseInputFolder()
    {
        try
        {
            FolderBrowserDialog fbd = new FolderBrowserDialog();
            fbd.Description = "Please Select An Input Path";
            fbd.SelectedPath = @"C:\";

            if (fbd.ShowDialog() == DialogResult.OK)
            {
                tbInputPath.Text = fbd.SelectedPath;
            }

        }
        catch (Exception ex)
        {
            MessageBox.Show("Error Occured While Trying To Populate Combo Boxes : " + ex.Message);
        }
    }

这是我在 selected 目录中查找的 foreach 循环:

foreach (var files in Directory.GetFiles(strPath))

所以我通过执行以下代码设法解决了这个问题:

foreach (string subDir1 in Directory.GetDirectories(strPath))
                {
                    foreach (string subDir2 in Directory.GetDirectories(subDir1))
                    {
                        foreach (var files in Directory.GetFiles(subDir2))
                        {
                            if(subDir2.Contains("In"))
                            {
                                //IMPORT FILES METHOD GOES HERE
                            }
                            else
                            {
                                continue;
                            }

                        }
                    }

                }

sudo 代码让你明白了.....

此代码的好处是文件夹的深度不再重要。

如果您的文件有 9 个文件夹,那将有很多 for-each 块。 无论深度如何,此代码都不需要任何更改

Start()
{
    var directories= SomeList(path);
    Search(directories)
}

Search(List<T> directorys)
{
    foreach(var item in directorys)
    {
        //some if conditions to end early if you find what you looking for.         
        //or logic to maintain tracking of sorts.

        //next set
         var folders = GetFolder(item);
         Search(folders)
    }
}

正如其他人所建议的那样,您可以使用递归来简化代码并获得所需的文件夹。

我做了一个代码示例,你可以看看

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
           folderBrowserDialog1.SelectedPath = @"D:\";
            if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = folderBrowserDialog1.SelectedPath;
            }
            DirSearch(textBox1.Text);
        }


        public void DirSearch(string sDir)
        {
            try
            {
                foreach (string d in Directory.GetDirectories(sDir))
                {
                    foreach (string f in Directory.GetDirectories(d))
                    {
                        if(f.Contains("In"))
                        {
                            listBox1.Items.Add(f);
                        }

                    }
                    DirSearch(d);
                }
            }
            catch (System.Exception excpt)
            {
                Console.WriteLine(excpt.Message);
            }
        }
    }

结果: