2017-01-05 1 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ファイルを最初に検索して残りの部分を続けるにはどうすればよいですか?

それはpictureBox1にそれをロードすると、この項目のためにlistView1CheckBoxをチェックするのディレクトリイスラエルgifファイルを見つけたら、タイマー間隔は100

に設定されています。

しかし今、私はそれを変更して、すべてのサブディレクトリを検索しますが、最初はイスラエルだけを検索したいと思います。イスラエルを見つけて、pictureBox1にGIFをロードし、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'を使ってUIを更新する必要のあるバックグラウンドスレッドの検索のようです。 –

+0

ディレクトリに膨大な数のファイルがない場合:ルートディレクトリとサブディレクトリからすべてのgifファイル名を検索し、好きなときにファイル名のリストを並べ替えてから、タイマーを起動してリストの次の項目を表示し、次の項目のインデックスは最初に0に設定されます)。 – Graffito

+0

複数の* .gifファイルが見つかった場合、ループは最後のものだけをロードします。これは意図されていますか? –

答えて

0

あなたが実際に既に言葉で自分のアルゴリズムを説明:

が、それはイスラエルがFOR-をpictureBox1に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; 
} 

次に、他のすべてのサブディレクトリを検索し、サブディレクトリにgifファイルがある場合は、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; 
} 

は、あなたのtimer1_Tickイベントでこれらの2つのコードの部分を置きます。

イスラエルのフォルダにgifファイルがある場合は、チェックボックスが既にオンになっているため、if-else文に組み合わせることもできます。

+0

タイマーを使わなくてもやることができますか?私は新しい質問をします –

関連する問題