【发布时间】:2017-01-05 21:34:21
【问题描述】:
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;
}
}
}
这适用于以色列目录。
定时器间隔设置为100。
一旦它在以色列目录中找到一个 gif 文件,它就会将其加载到 pictureBox1 并检查 listView1 中的 CheckBox 是否有此项目。
但现在我想改变它,让它搜索所有子目录,但首先只搜索以色列。一旦它找到以色列并将 gif 加载到 pictureBox1 并检查 CheckBox 然后继续并搜索所有其他子目录,当子目录中有 gif 文件时,请选中 listView1 中的复选框。
listView1 中的项目按国家/地区名称排列。
现在我更改了代码,但它还没有达到我想要的效果:
现在只在以色列目录中搜索,而是在国家/地区下搜索所有子目录。
但不知道如何从这里继续。
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;
}
}
}
【问题讨论】:
-
你为什么需要一个计时器?这似乎是后台线程中的搜索,需要在查找结果时使用
Invoke更新 UI。 -
如果您的目录中没有大量文件:从根目录和子目录中搜索所有 gif 文件名,在您方便的时候对文件名列表进行排序,然后启动计时器以显示列表的下一项并增加下一项的索引,最初设置为 0)。
-
如果您找到多个 *.gif 文件,您的循环将仅加载最后一个。这是故意的吗?
标签: c# .net winforms subdirectory