Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 파일 크기를 사람이 읽기 쉬운 형식(KB, MB, GB)으로 변환하는 방법

프로그램에서 파일 크기를 다룰 때 바이트 단위의 숫자만 그대로 출력하면 사용자가 실제 크기를 직관적으로 파악하기 어렵습니다. 1048576이라는 숫자보다 1 MB라고 표시하는 것이 훨씬 이해하기 쉽습니다. 이 글에서는 C#을 사용해 파일 크기를 KB, MB, GB처럼 사람이 읽기 쉬운 형태(바이트 약어)로 변환하고 표시하는 방법을 알아봅니다.

필요한 기본 API 살펴보기

1. 파일 목록 가져오기 — Directory.GetFiles

C#은 디렉터리와 파일을 다루는 강력한 API를 기본적으로 제공합니다. Directory.GetFiles 메서드는 지정된 디렉터리에서 검색 패턴과 일치하는 모든 파일의 이름(전체 경로 포함)을 반환하며, 옵션에 따라 하위 디렉터리까지 재귀적으로 검색할 수 있습니다.

2. 파일 크기 확인하기 — FileInfo.Length

FileInfo.Length 속성은 해당 파일의 크기를 바이트(byte) 단위의 long 값으로 반환합니다. 이 값을 1024로 나누면 KB, 다시 1024로 나누면 MB, 한 번 더 나누면 GB 단위를 얻을 수 있습니다.

예제 코드

아래 예제는 지정한 폴더와 그 하위 폴더의 모든 파일을 찾아 각 파일의 크기를 KB, MB, GB 단위로 함께 출력합니다.

static void Main(string[] args) {
   string rootPath = @"C:\Users\Koushik\Desktop\TestFolder";

   // 하위 디렉터리를 포함하여 모든 파일 검색
   var files = Directory.GetFiles(rootPath, "*.*", SearchOption.AllDirectories);

   foreach (string file in files) {
      long size = new FileInfo(file).Length / 1024;   // KB 단위
      string humanKBSize = string.Format("{0} KB", size);
      string humanMBSize = string.Format("{0} MB", size / 1024);
      string humanGBSize = string.Format("{0} GB", size / 1024 / 1024);

      Console.WriteLine($"KB:{humanKBSize} MB:{humanMBSize} GB:{humanGBSize}");
   }
   Console.ReadLine();
}

실행 결과

file C:\Users\Koushik\Desktop\TestFolder\Topdirectory.txt 22 KB 0 MB 0 GB
file C:\Users\Koushik\Desktop\TestFolder\TestFolderMain\TestFolderMain.txt 0 KB 2 MB 0 GB
file C:\Users\Koushik\Desktop\TestFolder\TestFolderMain1\TestFolderMain1.txt 0 KB 0 MB 1 GB
file C:\Users\Koushik\Desktop\TestFolder\TestFolderMain2\TestFolderMain1.txt 0 KB 0 MB 1 GB
file C:\Users\Koushik\Desktop\TestFolder\TestFolderMain2\TestFolderMain2.txt 0 KB 0 MB 1 GB
file C:\Users\Koushik\Desktop\TestFolder\TestFolderMain2\TestFolderMainSubDirectory\TestFolderSubDirectory.txt 0 KB 0 MB 1 GB

더 나은 방법: 적절한 단위를 자동으로 선택하기

위 예제는 모든 단위를 동시에 출력하기 때문에 결과가 다소 번잡합니다. 실무에서는 파일 크기에 맞는 가장 적합한 단위 하나만 표시하는 것이 좋습니다. 아래와 같은 헬퍼 메서드를 만들면 바이트 크기에 따라 B, KB, MB, GB, TB 중 알맞은 단위를 자동으로 선택할 수 있습니다.

static string GetHumanReadableSize(long bytes) {
   string[] units = { "B", "KB", "MB", "GB", "TB" };
   double size = bytes;
   int unitIndex = 0;

   while (size >= 1024 && unitIndex < units.Length - 1) {
      size /= 1024;
      unitIndex++;
   }
   return $"{size:0.##} {units[unitIndex]}";
}

사용 방법은 간단합니다.

long fileSize = new FileInfo(@"C:\example.zip").Length;
Console.WriteLine(GetHumanReadableSize(fileSize));
// 출력 예: 3.42 MB

정리

  • Directory.GetFiles: 지정한 경로에서 조건에 맞는 파일 목록(경로 포함)을 가져옵니다.
  • FileInfo.Length: 파일 크기를 바이트 단위로 반환합니다.
  • 1024씩 반복해서 나누면 KB → MB → GB → TB 순서로 단위를 변환할 수 있으며, 크기 범위에 맞춰 단위를 자동 선택하면 사용자에게 훨씬 깔끔한 출력을 제공할 수 있습니다.