ใช้ 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 กว่าGetFilesSearchOption.AllDirectoriesรวม Subdirectories ทั้งหมด- ต้อง Handle
UnauthorizedAccessExceptionสำหรับโฟลเดอร์ที่ไม่มีสิทธิ์