[C# 문법] C# 월별, 일별 Directory 삭제하기
- C#/C# 문법
- 2021. 7. 29. 21:26
안녕하세요. 오늘은 C# 문법에서 Directory 에 대해서 알아 보려고 합니다. 그 중에서도 Directory 삭제하는 방법을 다루려고 하는데요. 제가 최근에 프로젝트를 하면서 Directory 경로가 년\월\일 로 이루어져 있었고, 월별, 일별 기준으로 SubDirectory 를 삭제를 해야하는 경우가 있었습니다. 이때 사용했던 로직이고, 제 방법이 완벽하지 않기 때문에 참고만 하시고 더 좋은 방법이 있으면 의견 나눠 주시면 좋겠습니다!ㅎㅎ
시나리오
- "대상 Path 경로\월\일" 로 이루어진 경로가 있습니다.
- 예를들어, "C:\Desktop\Demp\07\02" 이런식의 경로입니다.
- 해당 TopDirectory에는 년\월\일 트리 구조로 Directory 가 이루어져 있고, 폴더 이름이 날짜로 되어 있어서 폴더 이름을 기준으로 삭제 대상 날짜를 비교하여 이전의 월별, 일별 폴더들을 삭제할 수 있도록 예제 코드를 만들어 보았습니다.
예제 코드
using System.IO;
namespace ConsoleApp4
{
class Program
{
static void Main(string[] args)
{
// 삭제 대상 날짜 (년,월,일 단위)
int year = 2021;
int month = 07;
int day = 29;
// 기본 삭제 대상 경로
string directoryPath = @"C:\Users\Desktop\Demo";
// 월별 단위 삭제
MonthSubDirectoriesDelete(directoryPath, year, month);
// 일별 단위 삭제
DaySubDirectoriesDelete(directoryPath, year, month, day);
}
/// <summary>
/// 삭제 대상년도의 대상 월 제외한 이전 월들 지우는 메서드
/// </summary>
/// <param name="directoryPath"></param>
/// <param name="year"></param>
/// <param name="month"></param>
/// <param name="day"></param>
/// <param name="curDeletedDirectoryCount"></param>
private static void MonthSubDirectoriesDelete(string directoryPath, int year, int month)
{
// 대상 월의 전월부터 삭제 진행
for (int idx = month - 1; idx > 0; idx--)
{
string deleteMonthPath = Path.Combine(directoryPath, string.Format("{0}\\{1:D2}", year, idx));
// 삭제할 경로가 없다면 continue
if (Directory.Exists(deleteMonthPath) == false)
{
continue;
}
// 디렉토리 삭제
Directory.Delete(deleteMonthPath, true);
}
}
/// <summary>
/// 삭제 대상년도의 대상 일 제외한 이전 일들 지우는 메서드
/// </summary>
/// <param name="directoryPath"></param>
/// <param name="year"></param>
/// <param name="month"></param>
/// <param name="day"></param>
/// <param name="curDeletedDirectoryCount"></param>
private static void DaySubDirectoriesDelete(string directoryPath, int year, int month, int day)
{
// 대상 일의 전일부터 삭제 진행
for (int idx = day - 1; idx > 0; idx--)
{
string mon = string.Format("{0:D2}", month);
string deleteDayPath = Path.Combine(directoryPath, string.Format("{0}\\{1}\\{2:D2}", year, mon, idx));
// 삭제할 경로가 없다면 continue
if (Directory.Exists(deleteDayPath) == false)
{
continue;
}
// 디렉토리 삭제
Directory.Delete(deleteDayPath, true);
}
}
}
}
실행 결과
- 저는 테스트 삭제 대상 날짜를 2021/07/29 로 잡았습니다.
- 즉, 2021/07/29 이전의 월별, 일별 파일들은 삭제가 되어야 합니다.
- 7월이면, 06,05,04,03,02,01 월의 폴더를 통째로 삭제합니다.
- 다음으로 7월안에 일별 폴더에서 29일 이전의 일들인 28,27,26,25...01 일별의 폴더를 모두 삭제합니다.
- 실제로 삭제가 되는지 프로그램 실행하여 결과 확인하였습니다.
삭제 대상 Directory 삭제 전 모습
삭제 대상 Directory 삭제 후 모습
- 다음과 같이 월별, 일별들의 폴더들이 제대로 삭제된 것을 확인할 수 있습니다.
728x90
'C# > C# 문법' 카테고리의 다른 글
[C# 문법] C# Linq Zip 메서드 (0) | 2021.08.04 |
---|---|
[C# 문법] C# 디렉토리(Directory) 년\월\일 디렉토리 구조 삭제하기 (0) | 2021.08.03 |
[C# 문법] C# Directory 에서 SubDirectory(하위 디렉토리) 찾기 (0) | 2021.07.29 |
[C# 문법] C# Dictionary 같은 Key 에 여러개의 데이터 넣기 (0) | 2021.07.28 |
[C# 문법] C# 문자열 내 숫자만 필터하기 (0) | 2021.07.26 |
이 글을 공유하기