Ana Sayfa > C#, Programlama > C# Diskteki Boş Alan Miktarını Bulmak

C# Diskteki Boş Alan Miktarını Bulmak

06 Eylül 2010

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())
{
}

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ı


İlgili diğer başlıklar:



  1. Nuh Koca
    Ocak 29th, 2011 at 18:20 | #1

    Hocam,öncelikle merhabalar…
    Ben bu örneği yapmaya çalıştım ama enum tanımlarken hep hata alıyorum neden acaba ?

    Error 1 Identifier expected; ‘byte’ is a keyword C:\Documents and Settings\NuhKoca\Desktop\ConsoleApplication1\ConsoleApplication1\Program.cs 25 3 ConsoleApplication1

    Error 3 Invalid token ‘,’ in class, struct, or interface member declaration C:\Documents and Settings\NuhKoca\Desktop\ConsoleApplication1\ConsoleApplication1\Program.cs 26 7 ConsoleApplication1