2012-11-28 2 views
5

테스트 파일을 정리하려면 다음을 시도하십시오. 그러나 파일을 지우지 않고 오류를 생성하지도 않습니다.디렉토리에서 파일을 반복적으로 삭제하지만 디렉토리 구조는 그대로 유지하십시오.

나는 분명한 뭔가를 놓치고 있습니까?

private void CleanUpTempDirFiles() 
    { 
     var fileGenerationDir = new DirectoryInfo(Path.Combine(Path.GetTempPath(), "TestFilesDir")); 

     fileGenerationDir.GetDirectories().ToList().ForEach(dir => dir.GetFiles().ToList().ForEach(file => file.Delete())); 
    } 
+0

디버거를 사용해보십시오. 런타임시 프로그램이 수행하는 작업을 결정하는 데 도움이됩니다. 버그를 보려는 코드에서 보는 것보다 훨씬 낫습니다. – usr

+0

이 하위 폴더의 파일을 삭제하는 코드 샘플이 아닙니까? 또는 주 파일의 파일을 삭제 하시겠습니까? –

+0

그건 완전히 재귀가 아니에요. 최상위 디렉토리 바로 아래에있는 디렉토리의 파일 만 삭제합니다 (이론상). 그것이 의도입니까? – wdavo

답변

0

파일이 TestFilesDir 폴더 안에 저장되어있는 경우 당신이 하위 디렉토리를의 얻을 수없는, 단순히 사용

fileGenerationDir.GetFiles().ToList().ForEach(file => file.Delete()); 

그렇지 않으면 당신은 하위 폴더의 파일을 삭제하는

0
private void CleanUpTempDirFiles() { 
     var fileGenerationDir = new DirectoryInfo(
      Path.Combine(Path.GetTempPath(), "TestFilesDir")); 

     fileGenerationDir.GetFiles().ToList().ForEach(file => file.Delete());    
    } 
1

이 그것을 할 것입니다 : 당신은 당신의 임시 폴더에있는 모든 하위 디렉토리를 반환 처음 GetDirectories를 사용하는

 string[] filePaths = Directory.GetFiles(
      Path.Combine(Path.GetTempPath(), "TestFilesDir") 
      , 
      "*", 
      SearchOption.AllDirectories); 

     foreach (var filePath in filePaths) 
      File.Delete(filePath); 
1

. 따라서이 디렉토리의 파일을 반환하지 않습니다. 그래서 대신에이 작업을 수행 할 수 있습니다 :

var tempDir = Path.Combine(Path.GetTempPath(), "TestFilesDir"); 
var allFilesToDelete = Directory.EnumerateFiles(tempDir, "*.*", SearchOption.AllDirectories); 
foreach (var file in allFilesToDelete) 
    File.Delete(file); 

ToLists을 제거하고 SearchOption.AllDirectories을 사용 재귀 적으로 검색하는.

How to: Iterate Through a Directory Tree (C# Programming Guide)

관련 문제