C#에서 지정된 경로의 모든 하위 폴더와 파일을 한 번에 삭제해야 하는 경우가 종종 있습니다. 이럴 때 System.IO 네임스페이스를 활용하면 손쉽게 처리할 수 있습니다.
특히 DirectoryInfo 클래스는 디렉터리 내의 모든 하위 폴더와 파일 정보를 제공하므로, 반복문과 함께 사용하면 전체 삭제 작업을 간단하게 구현할 수 있습니다.
예제 시나리오
먼저 D 드라이브에 Demo라는 디렉터리가 있고, 그 안에 두 개의 하위 폴더와 각각의 파일들이 존재한다고 가정해 보겠습니다.
using System.IO;
namespace DemoApplication {
class Program {
static void Main(string[] args) {
DirectoryInfo di = new DirectoryInfo(@"D:\Demo");
foreach (DirectoryInfo dir in di.GetDirectories()) {
foreach (FileInfo file in dir.GetFiles()) {
file.Delete();
}
dir.Delete(true);
}
}
}
}코드 설명
위 코드의 동작 방식은 다음과 같습니다.
1. DirectoryInfo 객체 생성
new DirectoryInfo(@"D:\Demo")를 통해 대상 디렉터리를 나타내는 객체를 생성합니다. 문자열 앞의 @ 기호는 이스케이프 시퀀스를 무시하도록 하여 경로 표현이 간편해집니다.
2. GetDirectories()로 하위 폴더 탐색
GetDirectories() 메서드는 루트 디렉터리(Demo) 아래에 있는 모든 하위 폴더 목록을 반환합니다.
3. GetFiles()로 파일 삭제
각 하위 폴더 안에서 GetFiles() 메서드가 해당 폴더에 포함된 모든 파일(예: Demo File 1, Demo File 2)을 가져오고, file.Delete()로 하나씩 삭제합니다.
4. dir.Delete(true)로 폴더 삭제
파일이 모두 제거된 후 dir.Delete(true)를 호출하여 해당 폴더 자체를 삭제합니다. 매개변수 true는 재귀 삭제 옵션으로, 폴더 내부에 남아 있는 내용까지 함께 제거하도록 지정합니다.
실행 결과
위 코드를 실행하면 Demo 디렉터리 안의 모든 폴더와 관련 파일들이 완전히 삭제됩니다. 실행 후 디렉터리를 확인해 보면 하위 폴더와 파일이 더 이상 존재하지 않는 것을 확인할 수 있습니다.
주의 사항
이 방식은 루트 디렉터리(Demo) 자체는 유지하고 내부 내용만 삭제합니다. 만약 루트 디렉터리까지 통째로 삭제하고 싶다면, di.Delete(true)를 호출하면 됩니다. 또한 삭제 작업은 되돌릴 수 없으므로, 중요한 데이터가 포함된 경로에 실수로 적용되지 않도록 주의해야 합니다.