2011-04-11 3 views
3

아무도 샘플을 갖고 있지 않거나 스레드 및 C# .net이있는 폴더에서 많은 파일과 하위 디렉토리를 삭제하는 방법이 없습니다.많은 파일과 하위 폴더를 C# 및 스레드로 삭제하십시오.

감사합니다.

+4

일반적으로 좋지 않습니다. 물리 디스크의 디스크 작업은 병렬로 더 많이 수행하면 속도가 느려지는 경향이 있습니다. UI를 반응 적으로 유지하고 싶다면'BackgroundWorker'를 만들 수 있습니다.하지만이 경우 스레드를 더 빠르게하지는 않습니다. –

+0

디렉토리를 완전히 삭제 하시겠습니까 아니면 특정 파일 만 삭제 하시겠습니까? –

+0

전체 디렉토리와 그 안에있는 모든 파일/폴더. – RPS

답변

6

가장 좋은 방법은 Directory.Delete(directory, true);을 호출하는 것입니다. 그러면 디렉터리, 모든 하위 디렉터리 및 모든 파일이 삭제됩니다. 스레딩이 필요 없습니다.

비동기식으로 (예 : 디렉토리 삭제가 진행되는 동안 프로그램에서 다른 작업을 수행하도록) 수행하려면 Calling Synchronous Methods Asynchronously을 살펴보십시오.

0

운영체제에 그대로 두십시오. 작업 속도를 높이고 작업 부하가 높을 때에도 성능을 향상시킬 수 있도록 작업을 예약하는 방법이 훨씬 뛰어납니다. 나머지 프로그램을 차단할 수 없으면 별도의 스레드에서 프로그램을 보내십시오.

0

something like this가 : 당신이 그것을 멀티 스레딩 시도 할 경우

ThreadPool.QueueUserWorkItem(delegate 
{ 
    try 
    { 
     Directory.Delete(path, true); 
    } 
    catch { } //Do something 
}); 
0

(나는 상상이가 수도 스레드 풀은 전체 시간을 단축합니다 사용할 수없는 네트워크 리소스에서 얻으려고 같은 경우) :

List<Task> tasks = 
(from c in yourDirList select new Action(() => 
{ 
    try 
    { 
    // do it 
    } 
    catch (Exception e) 
    { 
    // log it 
    } 
}) 
into action 
select Task.Factory.StartNew(action)).ToList(); 

tasks.ForEach(c => c.Wait()); 
+0

디렉터리를 제거하기 전에 디렉터리 내의 모든 파일과 디렉터리를 제거해야합니다. 특정 순서로 작업해야하기 때문에보기보다 어렵습니다. 디렉토리 구조는 임의로 깊기 때문에 모든 하위 요소가 삭제 될 때까지 디렉토리 삭제 대기 상태로 만드는 로직을 포함해야합니다. –

관련 문제