Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

วิธีคำนวณขนาดโฟลเดอร์ (Folder Size) ใน C#

ใช้ Directory.EnumerateFiles() และ LINQ Sum() คำนวณขนาดไฟล์ทั้งหมดรวม Subdirectories

โค้ดหลัก

DirectoryInfo info = new DirectoryInfo(@"D:\new");

// ขนาดไฟล์ในโฟลเดอร์นี้ (ไม่รวม Sub)
long size = info.EnumerateFiles().Sum(file => file.Length);

// รวม Subdirectories (Recursive)
long totalSize = info.EnumerateFiles("*", SearchOption.AllDirectories)
                      .Sum(file => file.Length);

โค้ดตัวอย่างเต็ม

using System;
using System.IO;
using System.Linq;

class Program
{
    static void Main()
    {
        string path = @"D:\new";
        DirectoryInfo info = new DirectoryInfo(path);
        
        if (!info.Exists)
        {
            Console.WriteLine("Directory not found!");
            return;
        }
        
        // ขนาดเฉพาะโฟลเดอร์นี้
        long topLevelSize = info.EnumerateFiles()
                                 .Sum(f => f.Length);
        
        // ขนาดรวม Subdirectories
        long totalSize = info.EnumerateFiles("*", SearchOption.AllDirectories)
                             .Sum(f => f.Length);
        
        Console.WriteLine($"Top-level size: {FormatSize(topLevelSize)}");
        Console.WriteLine($"Total size (recursive): {FormatSize(totalSize)}");
        
        Console.ReadKey();
    }
    
    static string FormatSize(long bytes)
    {
        string[] units = { "B", "KB", "MB", "GB", "TB" };
        int i = 0;
        double size = bytes;
        while (size >= 1024 && i < units.Length - 1)
        {
            size /= 1024;
            i++;
        }
        return $"{size:0.##} {units[i]}";
    }
}

เมธอด Directory อื่นๆ ที่มีประโยชน์

เมธอดคำอธิบาย
CreateDirectory(path)สร้างโฟลเดอร์ (รวม Parent)
Delete(path, recursive)ลบโฟลเดอร์ (recursive = true ลบซับโฟลเดอร์ด้วย)
EnumerateDirectories(path)ดึง Subdirectories (Lazy)
EnumerateFiles(path, pattern, option)ดึงไฟล์ (รองรับ SearchOption.AllDirectories)
GetFiles(path)ดึงไฟล์ทั้งหมด (Eager - คืน Array)

หมายเหตุ

  • EnumerateFiles ใช้ Lazy Evaluation - ประหยัด Memory กว่า GetFiles
  • SearchOption.AllDirectories รวม Subdirectories ทั้งหมด
  • ต้อง Handle UnauthorizedAccessException สำหรับโฟลเดอร์ที่ไม่มีสิทธิ์