C# 如何先搜索特定目录的gif文件,然后继续搜索其余文件?

C# 如何先搜索特定目录的gif文件,然后继续搜索其余文件?,c#,.net,winforms,subdirectory,C#,.net,Winforms,Subdirectory,这对以色列目录很有效 计时器间隔设置为100 一旦在Israel目录中找到gif文件,它就会将其加载到pictureBox1,并选中listView1中的复选框 但现在我想改变它,使它将搜索所有子目录,但首先只为以色列。一旦找到Israel并将gif加载到pictureBox1并选中复选框,然后继续搜索所有其他子目录,当子目录中有gif文件时,选中listView1中的复选框 列表视图1中的项目按国家名称列出 现在我更改了代码,但它还没有达到我想要的效果: 它现在只在以色列目录下搜索国家下的所有

这对以色列目录很有效

计时器间隔设置为100

一旦在Israel目录中找到gif文件,它就会将其加载到
pictureBox1
,并选中
listView1
中的
复选框

但现在我想改变它,使它将搜索所有子目录,但首先只为以色列。一旦找到Israel并将gif加载到
pictureBox1
并选中
复选框
,然后继续搜索所有其他子目录,当子目录中有gif文件时,选中
listView1
中的复选框

列表视图1
中的项目按国家名称列出

现在我更改了代码,但它还没有达到我想要的效果:

它现在只在以色列目录下搜索国家下的所有子目录

但不知道如何从这里继续下去

private void timer1_Tick(object sender, EventArgs e)
{
     DirectoryInfo dir1 = new DirectoryInfo(@"C:\Users\Chocolade\AppData\Local\SatellitesImagesDownloads\SatellitesImagesDownloads\Countries\Israel\");
     fi = dir1.GetFiles("*.gif");

     foreach (FileInfo finfo in fi)
     {
         if (fi.Length > 0 && finfo.Length > 0)
         {
              timer1.Enabled = false;
              pictureBox1.Load(finfo.FullName);

              listView1.Items[0].Checked = true;
         }
     }
}

实际上,您已经用文字描述了您的算法:

但首先只有在以色列发现以色列将gif加载到pictureBox1并选中复选框后,它才会这样做

这里实际上不需要for循环,因为如果找到多个文件,您将加载最后一个文件,您可以使用
last()
方法

private void timer1_Tick(object sender, EventArgs e)
{
     DirectoryInfo dir1 = new DirectoryInfo(@"C:\Users\Chocolade\AppData\Local\SatellitesImagesDownloads\SatellitesImagesDownloads\Countries\");
     fi = dir1.GetFiles("*.gif", SearchOption.AllDirectories);

     foreach (FileInfo finfo in fi)
     {
         if (fi.Length > 0 && finfo.Length > 0)
         {
              timer1.Enabled = false;
              pictureBox1.Load(finfo.FullName);

              listView1.Items[0].Checked = true;
         }
     }
}
然后继续搜索所有其他子目录,当子目录中有gif文件时,在listView1中选中该文件的复选框

将这两个代码部分放入
timer1\u Tick
事件中


您还可以将它们组合成if-else语句,因为如果您在Israel文件夹中找到gif文件,您的复选框将被选中。

为什么您需要计时器?这似乎是在后台线程中进行的搜索,在查找结果时需要使用
Invoke
更新UI。如果目录中没有大量文件:从根目录和子目录中搜索所有gif文件名,在方便的时候对文件名列表进行排序,然后启动计时器以显示列表的下一项,并将下一项的索引初始设置为0。如果找到多个*.gif文件,则循环将仅加载最后一个。这是故意的吗?也许我不用定时器也能做到?我将提出一个新问题
DirectoryInfo dir1 = new DirectoryInfo(@"C:\Users\Chocolade\AppData\Local\SatellitesImagesDownloads\SatellitesImagesDownloads\Countries\Israel\");
fi = dir1.GetFiles("*.gif");

// if you have found any gif files at all
if (fi.Any())
{
    timer1.Enabled = false;
    pictureBox1.Load(fi.Last().FullName);

    listView1.Items[0].Checked = true;
}
fi = dir1.GetFiles("*.gif", SearchOption.AllDirectories);

// if you have found any gif files at all
if (fi.Any())
{
    timer1.Enabled = false;

    listView1.Items[0].Checked = true;
}