C# Diskteki Boş Alan Miktarını Bulmak

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ı")

İlgili diğer makaleler

blog comments powered by Disqus

Engin Polat hakkında

Senior Software Engineer, @Microsoft

Ada ve Ege'nin babası ;)

Kategoriler

İstatistik

Makale Adedi: 484

Creative Commons Lisansı