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