Yazdığımız uygulamalar veya windows service’lerde, bilgisayarın disklerindeki boş alan miktarını bulmamız ve bu miktara göre çeşitli karar mekanizmalarını çalıştırmamız gerekebilir.
Yapmamız gereken ilk iş, bilgisayara bağlı bulunan disklerin listesine erişmek.
DriveInfo sınıfının GetDrives() methodundan geriye, detaylı bilgilerine erişebileceğimiz disklerin listesi döner.
Basit bir foreach döngüsü ile bu liste üzerinden tüm disklere erişebiliriz;
foreach (DriveInfo disk in DriveInfo.GetDrives()) { }</pre>
Döngü içerisinde, disk’in adına ulaşmak için DriveInfo sınıfının Name özelliğini kullanırız.
C# ile bilgisayarınızdaki diskleri listelemek yazımda yazdığım şekilde, DriveInfo sınıfının IsReady özelliği ile diskin kullanılabilir olduğunu kontrol ederiz.
Son olarak;
DriveFormat özelliği ile diskin Dosya Sistemi Formatını (File System Format) AvailableFreeSpace özelliği ile diskin boş alan miktarını (byte cinsinden) TotalFreeSpace özelliği ile diskin toplam boş alan miktarını (byte cinsinden) TotalSize özelliği ile diskin toplam kapasitesini (byte cinsinden)
öğrenebiliriz.
using System; using System.IO; public static class Program { public static void Main(string[] args) { foreach (DriveInfo disk in DriveInfo.GetDrives()) { Console.WriteLine("Disk: {0}", disk.Name); if (disk.IsReady) { Console.WriteLine("Toplam Alan:\t\t{0}", disk.TotalSize.FormatDosyaBoyutu()); Console.WriteLine("Boş Alan Miktarı:\t{0}", disk.AvailableFreeSpace.FormatDosyaBoyutu()); } Console.WriteLine("**********"); } Console.ReadLine(); } }
Boş Alan Miktarı bilgisi ekrana byte cinsinden sayı olarak yazılacağı için pek okunaklı değildir.
C# Windows tarzı dosya boyutu formatlayıcı yazımda yazdığım dosya boyutu formatlayıcı kodunu da ekleyelim;
public enum Boyutlar { byte, kilobyte, megabyte, gigabyte, terabyte, petabyte } public static string FormatDosyaBoyutu(this long DosyaBoyutu) { Boyutlar BoyutTanim = Boyutlar.byte; while (Math.Round((decimal)DosyaBoyutu) >= 1000) { DosyaBoyutu /= 1024; BoyutTanim++; } return string.Format("{0}\t{1}", DosyaBoyutu.ToString("f2"), BoyutTanim); }
Böylece örnek kodun tamamı;
using System; using System.IO; public static class Program { public static void Main(string[] args) { foreach (DriveInfo disk in DriveInfo.GetDrives()) { Console.WriteLine("Disk: {0}", disk.Name); if (disk.IsReady) { Console.WriteLine("Toplam Alan:\t\t{0}", disk.TotalSize.FormatDosyaBoyutu()); Console.WriteLine("Boş Alan Miktarı:\t{0}", disk.AvailableFreeSpace.FormatDosyaBoyutu()); } Console.WriteLine("**********"); } Console.ReadLine(); } public enum Boyutlar { byte, kilobyte, megabyte, gigabyte, terabyte, petabyte } public static string FormatDosyaBoyutu(this long DosyaBoyutu) { Boyutlar BoyutTanim = Boyutlar.byte; while (Math.Round((decimal)DosyaBoyutu) >= 1000) { DosyaBoyutu /= 1024; BoyutTanim++; } return string.Format("{0}\t{1}", DosyaBoyutu.ToString("f2"), BoyutTanim); } } Yukarıdaki kodun çıktısı aşağıdaki *gibi* olacaktır; ![Boş Alan Hesaplayıcı](/assets/uploads/2010/09/BosAlanHesaplayici.png "Boş Alan Hesaplayıcı")
Senior Software Engineer, @Microsoft
Ada ve Ege'nin babası ;)
Makale Adedi: 484