Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Lấy tất cả file, sub-file và kích thước trong thư mục C#

Sử dụng System.IO.Directory và FileInfo để duyệt file hệ thống.

Phương thức chính

  • Directory.GetFiles(path, pattern, SearchOption): Trả về mảng đường dẫn file.
  • SearchOption.TopDirectoryOnly: Chỉ thư mục hiện tại.
  • SearchOption.AllDirectories: Đệ quy tất cả thư mục con.
  • new FileInfo(path).Length: Kích thước file tính bằng byte.

Ví dụ 1: Liệt kê tất cả file (đệ quy)

string rootPath = @"C:\TestFolder";
var files = Directory.GetFiles(rootPath, "*.*", SearchOption.AllDirectories);

foreach (string file in files)
    Console.WriteLine(file);

Ví dụ 2: Chỉ thư mục gốc

var files = Directory.GetFiles(rootPath, "*.*", SearchOption.TopDirectoryOnly);

Ví dụ 3: Lấy tên file và kích thước

var files = Directory.GetFiles(rootPath, "*.*", SearchOption.AllDirectories);

foreach (string file in files)
{
    var info = new FileInfo(file);
    Console.WriteLine($"{Path.GetFileName(file)}: {info.Length} bytes");
}

Kết quả mẫu

Topdirectory.txt: 0 bytes
TestFolderMain.txt: 0 bytes
TestFolderMain1.txt: 10 bytes
TestFolderMain2.txt: 20 bytes

Mở rộng: Format kích thước dễ đọc (KB, MB, GB)

static string FormatSize(long bytes)
{
    string[] suffixes = { "B", "KB", "MB", "GB", "TB" };
    int i = 0;
    double size = bytes;
    while (size >= 1024 && i < suffixes.Length - 1)
    {
        size /= 1024;
        i++;
    }
    return $"{size:0.##} {suffixes[i]}";
}

// Sử dụng
foreach (string file in files)
{
    var info = new FileInfo(file);
    Console.WriteLine($"{Path.GetFileName(file)}: {FormatSize(info.Length)}");
}

Kết quả format

Topdirectory.txt: 0 B
TestFolderMain.txt: 0 B
TestFolderMain1.txt: 10 B
TestFolderMain2.txt: 20 B
LargeFile.dat: 1.5 MB

Lưu ý hiệu suất

  • GetFiles tải toàn bộ mảng vào bộ nhớ -> chậm với thư mục lớn.
  • Dùng Directory.EnumerateFiles (trả về IEnumerable<string>) để stream, tiết kiệm RAM.
  • Xử lý exception UnauthorizedAccessException, PathTooLongException.
// EnumerateFiles - tốt hơn cho thư mục lớn
var files = Directory.EnumerateFiles(rootPath, "*.*", SearchOption.AllDirectories);
foreach (var file in files) { /* xử lý từng file */ }