Zaman zaman C# ile geliştirdiğim ufak tefek yazılımlarda disk ile ilgili işlemlere gereksinim duyuyorum. Özellikle disk ile ilgili FileType, VolumeLabel, TotalSize, AvailableFreeSpace vs. değerlerin alınabilmesi için gerekli olan birkaç yöntem var.
Msdn üzerindeki aramalarımda System.IO kullanılarak DriveInfo adlı sınıf yardımıyla kullanılan bir yöntemi buldum.
Namespace öncesinde;
[code lang="csharp"]
using System;
using System.IO;
[/code]
satırlarının eklenmesi gerekiyor.
Daha sonra diskleri listelemek için DriveInfo sınıfı içerisinde yeni bir nesne oluşturup sürücüleri GetDrives isteğiyle çağırıyoruz.
[code lang="csharp"]DriveInfo[] allDrives = DriveInfo.GetDrives();[/code]
Bu işlem sayesinde sistem üzerinde tanımlı tüm diskleri retrieve ediyoruz.Diskleri listelemek ve disklere ait bilgileri ayrı ayrı olarak sınıflandırmak için foreach kullanabiliriz.
[code lang="csharp"]foreach (DriveInfo d in allDrives)
{
// Yazdırma işlemleri
ConsoleWriteLine(d.Name); // sürücü harf bilgisi
ConsoleWriteLine(d.DriveType); // sürücü tipi ( fixed, removable, network based vs.)
ConsoleWriteLine(d.VolumeLabel); // sürücü etiket bilgisi
ConsoleWriteLine(d.DriveFormat); // sürücü disk yapısı ( fat32, ntfs vs.)
ConsoleWriteLine(d.AvailableFreeSpace); // sürücü için kullanılabilir alan (byte cinsinden)
ConsoleWriteLine(d.TotalSize); // sürücü için toplam alan bilgisi (byte cinsinden)
}
[/code]
Bu yöntemi uygularken bir ayrıntıya dikkat etmek gerekiyor
Kodu çalıştırdığınız bilgisayarda eğer “Removable” tipte diskler var ise, ve kodunuzu “try” ile kullanmıyorsanız debug edilmeyecektir.
Removable tipte disk yapısında Label, AvailableFreeSpace, TotalSize vs. gibi bilgileri alamadığı için hata üretmesi de gayet normaldir.
Eğer amacınız sadece Fixed tipte ( yani yazılabilir ve sabit disk ) disklerleri sorgulamak ise,
[code lang="csharp"]if(DriveType == DriveType.Fixed)[/code]
kontrolünü yaptırmanız gerekiyor. Bu durumda sistem üzerinde Fixed tipteki diskleri listeleyerek diğerlerini exclude etmiş olacağız.

