C# ile Disk Boş Alanının ve Toplam Alanın Hesaplanması

C# ile Disk Boş Alanının ve Toplam Alanın Hesaplanması

C# ile boş disk alanı ve toplam disk alanı sorgulamanın birçok yöntemi vardır. İsterseniz direkt donanım bilgileri ile çekin isterseniz farklı sınıflar kullanın veya türetin farketmez. Bu yazımda size bunu elde etmenin 2 yolunu göstereceğim. 1.si System.IO referansı ile DriveInfo kullanarak 2. si ise System.Management referansı ile ManagementObjectSearcher kullanarak.

Gelin aşağıdaki kod bloklarını beraber çözelim…

using System;
using System.IO;
using System.Management;

namespace DiskBilgisi
{
    class Program
    {
       
        static void Main(string[] args)
        {

            Console.WriteLine("1. Yöntem ile Disk Bilgisinin Alınması");
            yontem1();
            Console.WriteLine("\n2. Yöntem ile Disk Bilgisinin Alınması");
            yontem2();
            Console.Read();

            
        }
        private static void yontem1()
        {
            string diskKalanBosAlan = "";
            string diskToplamAlan = "";
            int index = 0;

            foreach (DriveInfo disk in DriveInfo.GetDrives())
            {
               
                if (disk.IsReady)
                {
                    diskKalanBosAlan += "Disk " + index + " üzerindeki boş alan: " + Math.Round(disk.TotalFreeSpace / Math.Pow(1024, 3),2)+ " GB\n";
                    diskToplamAlan += "Disk " + index + " üzerindeki toplam alan: " + Math.Round(disk.TotalSize / Math.Pow(1024, 3),2) + " GB\n";
                }

                index++;

            }

            Console.WriteLine(diskKalanBosAlan);
            Console.Write(diskToplamAlan);
        }

        private static void yontem2()
        {
            ManagementObjectSearcher diskBilgisi = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_LogicalDisk");
            List<object> gelenVeri = new List<object>();

            int index = 0,diskIndex=0;
            string cikti = "";
            foreach (ManagementObject bul in diskBilgisi.Get())
            {

                gelenVeri.Add(bul["FreeSpace"]);
                cikti += "Disk " + index+ " üzerindeki boş alan: " + (Math.Round(Convert.ToDouble(gelenVeri[index])/Math.Pow(1024,3),2))+" GB\n";
                index++;
            }
            foreach(ManagementObject bul in diskBilgisi.Get())
            {
                gelenVeri.Add(bul["Size"]);
                cikti += "Disk " + diskIndex + " üzerindeki toplam alan: " + (Math.Round(Convert.ToDouble(gelenVeri[index]) / Math.Pow(1024, 3), 2)) + " GB\n";
                index++;
                diskIndex++;
            }
            Console.WriteLine(cikti);
            
        }
       
       
    }
} 

Burada yontem1() ve yontem2() şeklinde 2 metod oluşturdum.

1. Metodda Neler Var?

İlk yöntemimizde görüldüğü üzere System.IO referansından DriveInfo nesnesini çağırdık. Burada hazır diskler üzerinde sorgulama yaparak TotalFreeSpace ve TotalSize değerlerini hesaplatmış olduk.

2. Metodda Neler Var?

İkinci yöntem biraz karmaşık gelebilir. Çünkü WMI denetiminden sınıflara erişmek için ManagementObjectSearcher nesnesini kullandık. Tabi bunun geri dönüş değeri ManagementObject türünde olacağı için foreach döngümüzü buna göre ayarladık. “root\CIMV2” alanından çekilen “Win32_LogicalDisk” sınıfının FreeSpace ve Size nesnelerinden gelen veriyi işleyip anlayacağımız şekilde sayısal verilere dönüştürmüş olduk.

Aşağıda örnek bir çıktı görseli mevcuttur.

diskinfo

Not: ManagementObjectSearcher nesnesini kullanmak için projenize Referans olarak System.Management eklemeniz gerekmektedir.

Ferhat Kurt

İlgili Yazılar
Cevap yaz