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
GetFilestả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 */ }