Sử dụng class System.IO.FileInfo để lấy thông tin file, trong đó property Length trả về kích thước tính bằng byte (kiểu long).
Cách cơ bản
using System.IO;
string path = @"C:\Data\file.txt";
long sizeInBytes = new FileInfo(path).Length;
Console.WriteLine($"Size: {sizeInBytes} bytes");
Lấy kích thước nhiều file trong thư mục
string dirPath = @"C:\Data";
DirectoryInfo dir = new DirectoryInfo(dirPath);
FileInfo[] files = dir.GetFiles();
foreach (FileInfo file in files)
{
Console.WriteLine($"{file.Name}: {file.Length} bytes");
}
Format kích thước dễ đọc (KB, MB, GB)
static string FormatFileSize(long bytes)
{
if (bytes < 0) return "0 B";
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]}";
}
// Usage
foreach (FileInfo file in files)
Console.WriteLine($"{file.Name}: {FormatFileSize(file.Length)}");
Kết quả mẫu
config.json: 1.23 KB
image.png: 2.5 MB
video.mp4: 1.2 GB
empty.txt: 0 B
Lưu ý quan trọng
FileInfo.Lengthtrả vềlong(hỗ trợ file > 4GB).intchỉ đủ 2GB.- File không tồn tại:
FileInfokhông ném exception, nhưngLengthsẽ némFileNotFoundExceptionkhi truy cập. Kiểm trafile.Existstrước. Directory.GetFilesvsDirectoryInfo.GetFiles:DirectoryInfotrả vềFileInfo[](có Length),Directory.GetFilestrả vềstring[](cần new FileInfo).- Dùng
Directory.EnumerateFiles/DirectoryInfo.EnumerateFilescho thư mục lớn (lazy, tiết kiệm RAM).
Ví dụ an toàn (Kiểm tra tồn tại)
string path = @"C:\Data\maybe_missing.txt";
FileInfo fi = new FileInfo(path);
if (fi.Exists)
{
Console.WriteLine($"{fi.Name}: {FormatFileSize(fi.Length)}");
}
else
{
Console.WriteLine("File not found");
}
.NET 6+: FileInfo.Length là long, có thể dùng pattern matching
// Switch expression cho size category
string GetSizeCategory(FileInfo fi) => fi.Length switch
{
< 1024 => "Tiny (<1KB)",
< 1024 * 1024 => "Small (<1MB)",
< 100 * 1024 * 1024 => "Medium (<100MB)",
_ => "Large"
};