2017-01-05 2 views
0
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 каталога, а затем продолжить его?

Интервал таймера устанавливается 100.

После того, как он нашел файл GIF в папке Израиль это загружая его в pictureBox1 и проверяя CheckBox в listView1 для этого элемента.

Но теперь я хочу изменить его и заставить его искать все подкаталоги, но сначала только для Израиля. Как только он нашел Израиль и загрузил 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; 
     } 
    } 
} 
+0

Зачем вам нужен таймер? Кажется, это поиск в фоновом потоке, который необходимо обновить пользовательский интерфейс, используя 'Invoke' при поиске результата. –

+0

Если у вас нет большого количества файлов в вашем каталоге: найдите все имена файлов gif из корневого каталога и подкаталогов, отсортируйте список имен файлов в удобное для вас время и затем запустите свой таймер, чтобы отобразить следующий элемент списка и приращение индекс следующего элемента изначально установлен в 0). – Graffito

+0

Если вы нашли несколько файлов * .gif, ваш цикл будет загружать только последние. Это предназначено? –

ответ

0

Вы на самом деле описал свой алгоритм в словах уже:

но первый только для Израиля, когда он нашел Израиль погрузили GIF в pictureBox1 и проверил флажок

формирова- цикл на самом деле не нужен здесь, так как вы загрузите последний файл, если вы нашли более одного, вы можете просто использовать метод Last()

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

затем продолжите поиск и найдите все остальные подкаталоги, и когда в подкаталоге есть файл gif, установите флажок в спискеView1.

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

эти две части кода в вашем timer1_Tick случае.

Вы также можете объединить их в инструкцию if-else, так как ваш флажок будет проверен уже, если вы нашли gif-файл в папке Israel.

+0

Может быть, я могу сделать это и без таймера? Я задам новый вопрос –

Смежные вопросы