[C# 문법] C# 월별, 일별 Directory 삭제하기

안녕하세요. 오늘은 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

이 글을 공유하기

댓글

Designed by JB FACTORY