Uygulamalarımız sıklıkla verileri bir yere saklamak yada diğer uygulamalarla iletişim kurmak ister. Bunları yaparkende illaki ve dosya sistemine ulaşmalı ve veri okuyup yazabilmelidir. Bu Bölümde bunları göreceğiz.
Bölüm2.1 Dosya Sistemiyle Çalışmak:
.Net framework içerdiği bir çok sınıf ile temel dosya yönetimi görevlerinden; sürücüleri aramayı, dosya ve klasörleri yönetmeyi ve dosya sistemindeki değişikliklere cevap vermeyi yerine getirir. Bu derste dosta yönetimi sınıflarındançok kullanılanları açıklayacaz.
Bu ders bittiğinde:
- bilgisayara bağlı olan sürücülerin listesini oluşturma
- dosya ve klasörleri kopyalama, taşıma, araştırma ve silme
- dosya veya klasör değişimlerine cevap verme
Sürücüleri Listelemek
Bilgisayara bağlı olan tüm sürücüleri listelemek için System.IO da bulunan statik DriveInfo.GetDrives metodu kullanarak DriveInfo nesneleri alınır.Örneğin aşağıdaki kod bilgisayara bağlı sürücüleri görüntüler.
foreach (DriveInfo di in DriveInfo.GetDrives())
Console.WriteLine("{0}:{1}",di.Name.ToString(),di.DriveType.ToString());
DriveInfo Sınıfı aşağıdaki özellikleri sunar:
- AvailableFreeSpace: sürücü üzerinde kullanılabilir boş alanı gösterir.
- DriveFormat: Dosya sisteminin ismini verir. ntfs fat gibi
- DriveType: Sürücünün tipini gösterir.
- IsReady: Sürücünün hazır olup olmadığını kontrol eder.
- Name: Sürücünün ismini verir.
- RootDirectory: Sürücünün ana dizinini verir.
- TotalFreeSpace:Sürücü üzerindeki toplam kullanılabilir boş alanı verir.
- TotalSize: sürücünün toplam depolama alanını verir.
- VolumeLabel:Sürücünün etiketini okuma/yazma işlemini yapar.
Dosyaları ve Klasörleri Yönetmek:
.net framework’un sağladığı sınıflar ile klasör ve dosyaları araştırma, yeni dosya yaratma, ve dosyaları yönetme işlemleri yapılır.
Bu sınıfların nasıl kullanılacağı aşağıda açıklanmıştır.
Dosyaları araştırma:
DirectoryInfo sınıfını kullanarak dosya ve klasörleri araştırabiliriz. İlk önce DirectoryInfo sınıfından araştırılacak olan klasörün ismi bildirilerek bir örnek oluşturuyoruz(dirInfo). Daha sonra DirectoryInfo.GetDirectories veya DirectoryInfo.GetFiles metodlarını kullanarak klasörleri ve dosyaları ilgili değişkenlere aktararak görebiliriz.
DirectoryInfo dir = new DirectoryInfo(@"c:\windows");
Console.WriteLine("klasörler:");
foreach (DirectoryInfo dirInfo in dir.GetDirectories())
Console.WriteLine(dirInfo.Name);
Console.WriteLine("\nDosyalar:");
foreach (FileInfo fiInfo in dir.GetFiles())
Console.WriteLine(fiInfo.Name);
Klasörleri Oluşturma:
Klasörleri yaratmak için DirectoryInfo sınıfından yine bir örnek yaratıyoruz ve daha sonra DirectoryInfo.Create metodunu çağırıyoruz.var olan bir klasörün olup olmadığını DirectoryInfo.Exists özelliğini kullanarak öğrenmemiz gerekir. aşağıdaki örnekte klasörün olup olmadığı kontrol ediliyor eğer ki klasör mevcutsa CLR aynı klasörü oluşturma isteğimiz için herhangi bir “istisnai durum” oluşturmaz.
DirectoryInfo dr = new DirectoryInfo(@"c:\deleteme");
if (dr.Exists)
Console.WriteLine("bu klasör zaten mevcut");
else
dr.Create();
Dosyaları kopyalama,taşıma,silme ve yaratma:
Dosyalar üzerinde bu işlemleri yapabilmek için static File.create, File.createText,File.copy, File.Move, File.Delete metodları kullanılır. Aşağıdaki örnekte bir dosya yaratıyor, onu kopyalıyor ve daha sonra ismini değiştirerek taşıyoruz.
File.CreateText(@"c:\deleteme\benim.txt");
File.Copy(@"c:\deleteme\benim.txt", @"c:\deleteme\kopya.txt");
File.Move(@"c:\deleteme\benim.txt", @"d:\tasima.txt");
öneri olarak her satırı ayrı ayrı çalıştırıp klasörlerin içeriğini
ve dosyaların durumlarını görmeniz.
alternatif olarak FileInfo sınıfının sunduğu create,createtext,
copyto,moveTo ve delete metodlarını kullanabilirsiniz.
FileInfo fil = new FileInfo(@"c:\deleteme\benimtextdosyam.txt");
fil.CreateText();
fil.CopyTo(@"d:\senindosyan.txt");
FileInfo fil2 = new FileInfo(@"d:\senindosyan.txt");
fil2.MoveTo(@"c:\deleteme\senindosyan.txt");
Dosya sistemini görüntüleme:
FileSystemWatcher sınıfı ile dosya güncellemeleri, yeni dosyalar, adı değişen dosyalar ve dosya sisteminde meydana gelen diğer değişikliklere cevap verir. ilkönce FileSystemWatcher örneği görüntülenecek olan yolun adreside girilerek birlikte yaratılır.FileSystemWatcher özellikleri ayarlanır. daha sonra olay yakalayıcısı için metod eklenir. En sonunda fileSystemWatcher.enableRaisingEvent özelliği true yapılır.
FileSystemWatcher fsw = new FileSystemWatcher(Environment.GetEnvironmentVariable("userprofile"));
fsw.IncludeSubdirectories = true;
fsw.NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite;
fsw.Changed += new FileSystemEventHandler(fsw_Changed);
fsw.EnableRaisingEvents = true;
FilesystemWatcher olayını ele alalım:
bizim belirttiğmiz yerdeki dosyalarda herhangi bir değişiklik olduğunda CLR FilSystemWatcher.Changed olayını ele alır bunu tüm değişimlerde yapar, silme yaratma değiştirme gibi… Önceki kod örneğinde eklenen fsw_changed metodu changed olayını yakalar aşağıdaki kodda da bunu nasıl yaptığı görülüyor.
static void fsw_Changed(object sender, FileSystemEventArgs e)
{
Console.WriteLine(e.ChangeType + ": " + e.FullPath);
}
eğer dosya yenide adlandırılıdığında buna cevap vermek istersek başka bir olay yakalayıcı yaratıp, RenamedEventArgs, FileSystemEventArgs nin yerine kullanılır.
static void fsw_Renamed(object sender, RenamedEventArgs e)
{
// Write the path of a changed file to the console
Console.WriteLine(e.ChangeType + " from " + e.OldFullPath +
" to " + e.Name);
}
FileSystemWatcher özelliklerinin ayarları:
Filesystemwatcherın aşağıdaki özelliklerini değiştirerek,
CLR nin hangi tipte istisnai durum fırlatacağı ayarlanabilir
filter:
Dosya ismini olayları tetikler. tüm dosyalar arasındaki değişim için
filter property kullanılır ve boş string "" yada *.* kullanılır.
bir özel dosyayı incelemek istiyorsak:
filter özelliğine filename eklenmelidir. mydoc.txt deki değişiklikleri incelemek istersek
filter özelliği "mydoc.txt" yapılır.
Notify Filter:
filename
directoryname
attributes
size
lastwrite
lastaccess
creationTime
security
.Path
klasörü görüntülemek için kullanılır. filesystemwatcherın construtorında
tanımlarız.
Bu bölümle ilgili iki adet uygulama ekte verilmiştir. başarılar
https://docs.google.com/open?id=0B3k7e25ssXt-NDQ2MmQ1OTItNmRjNi00ZjZkLWFmOGYtMTBjYjMxNTVjYjUy
https://docs.google.com/open?id=0B3k7e25ssXt-NmI0OTYwMTktZTMzNy00NjdmLThiOTktYzA3OTkyNjZlMDJj
