Bu yazımızda FileStream nesnesi, FileStream nesnesinin Özellikleri ve Metotları ile ilgili bilgiler vererek bu özellik ve metotların kullanımıyla ilgili bazı küçük örnekler gerçekleştireceğiz. Örnekler içerisinde C# ile Not defterinde oluşturulmuş txt dosyası içeriğinin okunması ve txt dosyasının içeriğine ekleme yapılması konularını göreceksiniz.
FileStream nesnesi yeni bir dosya oluşturmak için kullanılmaktadır. FileStream nesnesini kullanabilmek için;
1 2 3 | using System.IO; |
kütüphanesi projeye dahil edilmelidir. Kullanımı aşağıdaki gibidir.
1 2 3 | FileStream(String, FileMode, FileAccess, FileShare, Int32, FileOptions, FileSecurity); |
Şimdi bu parametrelerin alabileceği değerleri inceleyelim.
FileMode :
Dosya açılış şekillerini belirler.
Append : Dosyayı açarak dosyanın sonuna ekleme yapmak amacıyla kullanılır. Eğer dosya yoksa oluşturulur.
Create : Yeni bir dosya oluşturulmak istendiğinde kullanılır. Eğer aynı isimde bir dosya bulunuyorsa üzerine yazılır.
CreateNew : Yeni dosya oluşturmak için kullanılır. Eğer dosya mevcutsa hata meydana gelir.
Open : Dosyayı açmak için kullanılır.
OpenOrCreate : Belirtilen dosya varsa açılır, yoksa yeni dosya oluşturulur.
Truncate : Belirtilen dosya açılarak içindeki bilgiler silinir.
FileAccess :
Dosya erişim şekillerini belirler.
Read : Dosyayı okumak üzere açar.
Write : Dosya sadece yazmak üzere açılır.
ReadWrite : Dosyayı okunmak ve yazmak amacıyla açar.
FileShare :
Dosya paylaşım şekillerini belirler.
None : Dosya kapatılana kadar başka işlem tarafından açılmasını engeller.
Read : Dosya açıkken başka işlemler tarafından açılıp okunabilmesi sağlanır.
Write : Dosya açıkken başka işlemler tarafından açılıp yazılabilmesini sağlar.
ReadWrite : Dosya açıkken dosyanın açılıp okunup yazılabilmesi sağlanır.
FileOptions :
Dosya seçenekleri ayarlanır.
None : Herhangi bir özellik içermez.
WriteThrough : Sistemin herhangi bir arabellek tarafından doğrudan disk üzerine yazılacağını gösterir.
Asynchronous : Bir dosyanın asenkron olarak okuma ve yazma için kullanılabileceğini ayarlar.
RandomAccess : Dosyaya rasgele erişilebileceğinigösterir. Örnek olarak bir önbellek dosyasını optimize etmek için kullanılabilir.
DeleteOnClose : Dosyanın kullanımda olmadığı zaman otomatik olarak silineceğini gösterir.
Encrypted : Dosyanın şifrelendiğini ve şifrelemede kullanılan kullanıcı hesabıyla çözülebileceğini gösterir.
Şimdi de FileStream Nesnesinin bazı özelliklerine bakalım.
CanRead : Aktif stream nesnesinin okumayı destekleyip desteklemediği belirlenir.
CanSeek : Aktif stream nesnesinin erişimi destekleyip desteklemediği ayarlanır.
CanTimeout : Aktif stream nesnesinin zaman aşımı olayını destekleyip desteklemediği ayarlanır.
CanWrite : Aktif stream nesnesinin yazmayı destekleyip desteklemediği belirlenir.
Handle : Aktif stream nesnesi için işletim sistemi tarafından üretilen Handle numarasını belirtir.
IsAsync : Aktif stream nesnesinin eşzamanlı ya da eşzamansız açılıp açılmadığını belirtir.
Length : Aktif stream nesnesinin boyutunu verir.
Name : Aktif stream nesnesinin ismini verir.
Position : Aktif stream nesnesinin pozisyonunu verir.
ReadTimeout :Zaman aşımına uğramadan önce milisaniye cinsinden stream nesnesinin ne kadar süre ile okunabileceği belirlenir.
WriteTimeout : Zaman aşımına uğramadan önce milisaniye cinsinden stream nesnesinin ne kadar süre ile yazılabileceği belirlenir.
FileStream Nesnesinin Metotları ise şunlardır.
BeginRead : Okuma işlemini başlatır.
BeginWrite : Yazma işlemini başlatır.
Close : Açık olan nesneyi kapatır.
CreateWaitHandle : WaitHandle nesnesi ataması yapar.
Dispose : Stream nesnesini siler.
EndRead : Okuma işlemini sonlandırır.
EndWrite : Yazma işlemini sonlandırır.
Equals : Belirtilen nesnenin geçerli nesneye eşit olup olmadığı bilgisini verir.
Finalize : Stream işlemi için ayrılmış kaynakları serbest bırakır.
Flush : Tampondaki bilgilerin boşaltılmasını ve stream dosyasının güncellenmesini sağlar.
GetType : Geçerli stream nesnesinin tipini bulur.
Lock : FileStream nesnesinin diğer işlemler tarafından değiştirilmesini engeller.
Read : Stream nesnesinden byte bloğunu okur ve bir tampon içerisine yazar.
ReadByte : Stream nesnesinden 1 byte okur ve 1 byte sonraki pozisyona ilerler.
Seek : Verilen değerin stream nesnesi içindeki konumunu belirler.
SetLength : Stream nesnesinin uzunluğunu belirler.
ToString : Geçerli nesneyi string türüne çevirir.
Unlock : FileStream nesnesine diğer işlemler tarafından erişilebilmesini sağlar.
Write : Tampon içerisinden byte bloğunu okuyarak yazar.
WriteByte : Stream nesnesi içindeki geçerli pozisyona bir byte yazar.
Şimdi FileStream nesnesi ve StreamWriter metodunu kullanarak Console uygulamasında belirlediğimiz bir txt dosyasına veri girişi yapalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 | static void Main(string[] args) { FileStream fs = new FileStream("D:\\deneme.txt",FileMode.Append,FileAccess.Write,FileShare.Write); StreamWriter sw = new StreamWriter(fs); Console.Write("Adınız : "); sw.WriteLine(Console.ReadLine()); sw.Close(); Console.WriteLine("Kayıt Eklendi."); Console.ReadKey(); } |
kodlarımızı çalıştıralım.
Veri girişi yaptığımızda D: sürücüsünde deneme.txt dosyası varsa üstüne ekleme yapacak, eğer deneme.txt dosyasını bulunamazsa oluşturularak ekleme yapılacaktır. Bir kaç giriş yaptıktan sonra deneme.txt dosyamızı açıp kontrol ediyoruz.
Burada Write metodu ve WriteLine metodu kullanılabilir. Aynı Console.Write ve WriteLine da olduğu gibi yan yana ve alt alta eklenmesi sağlanabilir. Biz burada sw.WriteLine satırı ile girişlerin alt alta yazdırılmasını sağlamış olduk.
Şimdide aynı dosyadan okuma işlemi gerçekleştireceğiz.
1 2 3 4 5 6 7 8 9 10 11 | static void Main(string[] args) { StreamReader sr = new StreamReader("D:\\deneme.txt"); Console.WriteLine(sr.ReadToEnd()); Console.ReadKey(); } |
Burada kullanmış olduğumuz ReadtoEnd metodu ile dosya sonuna kadar okuma işlemi gerçekleştirmiş olduk. Ekran çıktımız aşağıdaki gibi olacaktır.
ReadtoEnd metodu dışında Read, ReadBlock ve ReadLine metotlarınıda kullanabiliriz.
Read metodu ile bir yada birden fazla karakter okunabilir.
ReadLine metodu ile bir ya da birden fazla satır okunabilir.
ReadBlock metodu ile kaç karakter okunabileceği,okumaya başlanacak karakterin index numarası gibi parametreler kullanılabilir.
Şimdi ReadLine metodunu kullanarak ReadtoEnd metodunun yaptığı işlemi yapalım. Yani dosya sonuna kadar okuma işlemi gerçekleştirelim.
Kodlarımız şu şekilde olacaktır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | StreamReader sr = new StreamReader("D:\\deneme.txt"); string satir = ""; while (true) { satir = sr.ReadLine(); if(satir==null) { break; } Console.WriteLine(satir); } Console.ReadKey(); |
Ekran çıktımız değişmeyecektir.
Şimdi de ReadBlock metodu ile ilk 5 karakteri okuyalım.
1 2 3 4 5 6 7 8 9 10 11 | StreamReader sr = new StreamReader("D:\\deneme.txt"); char[] c = null; c = new char[255]; sr.ReadBlock(c, 0, 5); Console.WriteLine(c); Console.ReadKey(); |
Program çalıştırıldığında önce ekrana çalıştırıldığı dizini yazacak ve ardından aşağıdaki gibi bir menü çıkartacak :
1- Ekle
2- Göster
3- Çıkış
Seçiminiz :
1 seçildiğinde ekrandan bir string ifade alacak ve aldığı bu ifadeyi çalıştırıldığı dizindeki dosya.txt isimli dosyaya ekleyecek, 2 seçildiğinde dosya.txt içerisindeki yazılar ekrana gösterilecek, 3 seçildiğinde ise program kapanacaktır.
yardım edbilirmisiniz?