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

이것은 이스라엘 디렉토리에서 잘 작동합니다. 그것이 pictureBox1에로드하고이 항목에 대한 listView1CheckBox을 확인하는 것 이스라엘 디렉토리에 GIF 파일을 발견하면먼저 특정 디렉토리 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

당신은 실제로 이미 즉 알고리즘을 설명 :

하지만 처음 만 이스라엘은 이스라엘이 pictureBox1에있는 GIF를로드 발견하고 체크 박스

for-을 확인하면 루프는 실제로 여기서 필요하지 않습니다. 두 개 이상의 파일을 찾은 경우 마지막 파일을로드하면 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 파일이 있으면 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 경우에이 두 코드 부분을 넣어.

Israel 폴더에서 gif 파일을 찾은 경우 확인란이 이미 선택되어 있으므로 if-else 문으로 결합 할 수도 있습니다.

+0

아마 타이머를 사용하지 않고도 할 수 있을까요? 나는 새로운 질문을 할 것이다. –