2017-01-05 4 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; 
     } 
    } 
} 

Dies funktioniert gut für das Verzeichnis Israel.Wie kann ich zuerst nach einer bestimmten Verzeichnis-GIF-Datei suchen und dann mit dem Rest fortfahren?

Das Timer-Intervall wird auf 100 gesetzt

Sobald es eine GIF-Datei im Verzeichnis gefunden Israel es zu pictureBox1 ist das Laden und die CheckBox in listView1 zu diesem Artikel zu überprüfen.

Aber jetzt möchte ich es ändern und dafür sorgen, dass es alle Unterverzeichnisse durchsuchen wird, aber zuerst nur für Israel. Sobald es Israel gefunden hat und das gif auf die pictureBox1 geladen und überprüft CheckBox dann weiter und suchen Sie alle anderen Unterverzeichnisse und wenn es gif-Datei in einem Unterverzeichnis sind, aktivieren Sie das Kontrollkästchen dafür in der listView1. Die Artikel in der listView1 sind nach den Ländern benannt.

Nun änderte ich den Code, aber es noch nicht tut, was ich will:

Statt nur im Verzeichnis Israel es nun alle Unterverzeichnisse unter Ländern der Suche zu suchen.

Aber nicht sicher, wie man von hier weitergeht.

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

Warum brauchen Sie überhaupt einen Timer? Es scheint sich um eine Suche in einem Hintergrund-Thread zu handeln, der die Benutzeroberfläche mit 'Invoke' aktualisieren muss, wenn ein Ergebnis gefunden wird. –

+0

Wenn Sie nicht über eine große Anzahl von Dateien in Ihrem Verzeichnis verfügen: Durchsuchen Sie alle Gif-Dateinamen aus dem Stammverzeichnis und den Unterverzeichnissen, sortieren Sie die Liste der Dateinamen nach Ihren Wünschen und starten Sie den Timer, um das nächste Element der Liste anzuzeigen und zu erhöhen der Index des nächsten Eintrags ist anfangs auf 0 gesetzt). – Graffito

+0

Wenn Sie mehr als eine * .gif-Datei gefunden haben, lädt Ihre Schleife nur die letzte. Ist das beabsichtigt? –

Antwort

0

Sie beschrieben tatsächlich Ihren Algorithmus in Worten schon:

aber zunächst nur für Israel, wenn es Israel die gif auf die PictureBox1 geladen gefunden und überprüft das Kontrollkästchen

Die for- Schleife ist eigentlich nicht notwendig hier, da Sie die letzte Datei laden werden, wenn Sie mehr als eine gefunden haben, können Sie einfach die Methode

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

dann weiter und suchen Sie alle anderen Unterverzeichnisse und wenn es gif-Datei in einem Unterverzeichnis gibt, markieren Sie das Kontrollkästchen dafür in der listView1.

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

setzen diese beiden Codeteile in Ihrem timer1_Tick Ereignis.

Sie könnten sie auch in eine if-else-Anweisung kombinieren, da Ihre Checkbox bereits überprüft wird, wenn Sie eine Gif-Datei im Israel-Ordner gefunden haben.

+0

Vielleicht kann ich das auch ohne Timer machen? Ich werde eine neue Frage stellen –

Verwandte Themen