我想 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);
}
}
}
结果:
所以这是我想要 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);
}
}
}
结果: