Driveinfo | Engin Polat\'ın Windows 8 , Windows Phone 8 ve C# içerikli programcılık sitesi

Arşiv

Etiketlenen yazılar driveinfo

C# Diskteki Boş Alan Miktarını Bulmak

06 September 2010 1 yorum

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ı

C# ile bilgisayarınızdaki diskleri listelemek

25 August 2010 2 yorum

.Net 2.0 ile birlikte System.IO namespace’inde bulunan birçok eksiklik giderilmiştir. Özellikle Windows’un Dosya Sistemine erişmek için yeni sınıflar ve methodlar eklenmiştir.

DriveInfo sınıfında yapılan bir geliştirme sayesinde sistemde kurulu disklere erişebilir, disklerin tiplerini sorgulayabilir, kapasitelerini ve boş alan miktarını öğrenebiliriz.

Örneğin, sistemdeki diskleri listelemek için;

DriveInfo[] diskler = DriveInfo.GetDrives();
foreach (DriveInfo disk in diskler)
{
    string diskAdi = disk.IsReady ? String.Format(" - {0}", disk.VolumeLabel) : null;
    Console.WriteLine( "{0} - {1}{2}", disk.Name, disk.DriveType, diskAdi);
}

C:\ – Fixed – Sistem
D:\ – Fixed – Dosyalar
E:\ – CDRom
F:\ – CDRom
G:\ – Removable
H:\ – Removable
T:\ – Fixed – Temp
Y:\ – Fixed – Yedekler

IsReady property’si sayesinde disk’in o anda sistemde kullanılabilir olup olmadığını kontrol ediyoruz. Örneğin, içinde CD olmayan CD okuyucu için, disk’in etiketini almaya çalışmıyoruz. Uygulamamızın hata ile karşılaşmaması için, bu dikkat etmemiz gereken bir nokta.

Name ve DriveType özellikleri, diskin hazır olduğu durumlardan bağımsız olarak, her zaman kullanılabilir durumdadır.