【问题标题】:I want to select a desired folder and I want it to automatically search through all other folders within that directory conditionally C#我想选择一个所需的文件夹,我希望它有条件地自动搜索该目录中的所有其他文件夹 C#
【发布时间】:2020-04-16 08:30:04
【问题描述】:

所以这里是我要选择的文件夹: Selected Folder using FBD

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

在每个过时的文件夹中还有两个文件夹,分别命名为“In”和“Out”。

我想要做的只是选择 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);
        }
    }

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

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

【问题讨论】:

  • 递归获取文件时可以跳过特定的文件夹名称。

标签: c# visual-studio folderbrowserdialog


【解决方案1】:

所以我设法通过实现以下代码来解决这个问题:

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

                        }
                    }

                }

【讨论】:

  • 要做到这一点,请创建一个接收目录列表的方法...然后在该方法中循环,然后将其传递给您刚刚调用的方法
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

     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);
                }
            }
        }
    

    结果:

    【讨论】:

      猜你喜欢
      • 2018-05-19
      • 1970-01-01
      • 1970-01-01
      • 2011-01-14
      • 2017-05-08
      • 1970-01-01
      • 2016-12-06
      • 2011-09-09
      • 2011-08-07
      相关资源
      最近更新 更多