C# Dersinde Akış: StreamReader ve StreamWriter [Örnek]
C# Akışı nedir?
C# dosya işlemlerinde normalde akışlar dosyaları okumak ve yazmak için kullanılır. Akış, uygulama ile dosya arasında oluşturulan ek bir katmandır. Akış, dosyaya okuma ve yazma işlemlerinin düzgün yapılmasını sağlamak için kullanılır.
Akışlar normalde büyük dosyalardan veri okunurken kullanılır. Akışlar kullanılarak büyük dosyalardaki veriler küçük parçalara bölünür ve akışa gönderilir. Bu veri parçaları daha sonra uygulamadan okunabilir.
Küçük parçalara ayırmanın nedeni, büyük bir dosyayı tek seferde okumanın performans etkisidir. Örneğin 100 MB'lık bir dosyadaki verileri tek seferde okursanız, uygulamanız kilitlenebilir ve kararsız hale gelebilir. Bu durumda en iyi yaklaşım, dosyayı yönetilebilir parçalara ayırmak için akışları kullanmaktır.
Yani dosya üzerinde yazma işlemi gerçekleştirildiğinde öncelikle yazılacak veri akışa yazılır. Akıştan veriler daha sonra dosyaya yazılır. Aynı durum okuma işlemi için de geçerlidir. Okuma işleminde veriler öncelikle dosyadan akışa aktarılır. Veriler daha sonra uygulamadan akış yoluyla okunur. Akışları kullanarak nasıl okuyup yazabileceğimize dair bir örneğe bakalım.
Akış Okuyucusu
Akış okuyucusu, akışları kullanarak bir dosyadaki verileri okumak için kullanılır. Dosyadaki veriler ilk önce akışa okunur. Daha sonra uygulama akıştan verileri okur.
Örneğimiz için D sürücüsünde Örnek.txt adında bir dosyamızın olduğunu varsayacağız. Dosya basit bir metin dosyası olacak ve aşağıda gösterildiği gibi 2 satırdan oluşacaktır.
- Guru99 – .Net
- Guru99 -C#
Örneğimiz için basit bir Konsol uygulaması oluşturup Dosya akışlarıyla çalışacağız
Bir dosyadan veri okumak için akışları nasıl kullanabileceğimize dair bir örneğe bakalım. Program.cs dosyasına aşağıdaki kodu girin.
using System; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Tutorial { static void Main(string[] args) { String path = @"D:\Example.txt"; using (StreamReader sr = File.OpenText(path)) { String s = ""; while ((s = sr.ReadLine()) != null) { Console.WriteLine(s); } } Console.ReadKey(); } } }
Kod Açıklaması:-
- Öncelikle bir akış okuyucu nesnesi bildiriyoruz. Akış okuyucu nesnesi, C#'ta dosyadan uygulamaya bir akışı tanımlamak için kullanılır. Dosyadan veri okunduğunda veriler dosyadan akışa aktarılacaktır. Dosya.OpenText “Örnek.txt” dosyasını salt okunur modda açmak için kullanılır. Dosyanın işleyicisi daha sonra akış okuyucu nesnesine gönderilir.
- Daha sonra, dosyadaki tüm verileri okumak için kullanılacak geçici bir 's' değişkenini tanımlıyoruz.
- Daha sonra akış okuyucu yöntemi ReadLine'ı kullanarak akış tamponundaki her satırı okuruz. Bunu gerçekleştirdiğimizde operasyon, her satır önce dosyadan tampona aktarılacak. Sonra dize satırı tampondan 's' değişkenine aktarılacak. Daha sonra 's' dizesinin içeriğini konsola yazacağız.
Yukarıdaki kod ayarlandığında ve proje kullanılarak çalıştırıldığında Visual Studio, aşağıdaki çıktıyı alacaksınız.
Çıktı:-
Çıktıdan, Stream Reader'ın dosyadaki her iki satırı da okuduğunu görebilirsiniz. Son olarak akıştan okunan stringin satırları Konsola gönderildi.
Akış Yazarı
Akış yazıcısı, akışları kullanarak bir dosyaya veri yazmak için kullanılır. Uygulamadan gelen veriler ilk önce akışa yazılır. Bundan sonra akış verileri dosyaya yazar. Bir dosyadan veri yazmak için akışları nasıl kullanabileceğimize dair bir örneğe bakalım. Program.cs dosyasına aşağıdaki kodu girin.
using System; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Tutorial { static void Main(string[] args) { String path = @"D:\Example.txt"; using (StreamWriter sr = File.AppendText(path)) { sr.WriteLine("Guru99 - ASP.Net"); sr.Close(); Console.WriteLine(File.ReadAllText(path)); } Console.ReadKey(); } } }
Kod Açıklaması:-
- Öncelikle bir akış yazıcısı nesnesi bildiriyoruz. Akış yazıcı nesnesi C#'ta bir akışı tanımlamak için kullanılır. Akış daha sonra uygulamadan dosyaya veri yazmak için kullanılır. Verilerin yazılması gerektiğinde veriler uygulamadan akışa aktarılacaktır. File.AppendText komutu, “Example.txt” dosyasını ekleme modunda açmak için kullanılır. Dosyanın işleyicisi daha sonra akış yazıcısı nesnesine gönderilir.
- “Guru99 – ASP.Net” satırını akışa yazmak için Writeline akış yazma yöntemini kullanıyoruz. Akıştan itibaren satır dosyaya yazılacaktır.
- Daha sonra dosyaya yazdıktan sonra akış yazıcısını kapatıyoruz. Dosya artık yazma amaçları için gerekli olmadığında dosya işleyicilerini kapatmak normalde iyi bir uygulamadır.
- Son olarak dosyanın içeriğini tekrar okuyup konsol log’una yazıyoruz. Bu, satırın dosyaya yazılıp yazılmadığını kontrol etmek içindir.
Yukarıdaki kod ayarlandığında ve proje Visual Studio kullanılarak çalıştırıldığında aşağıdaki çıktıyı alacaksınız.
Çıktı:-
Çıktıdan “Guru99 – ASP.Net” satırının dosyaya başarıyla eklendiğini görebilirsiniz. 3 satırlık metnin tamamı konsolda görülebilir.
ÖZET
- Akışlar, uygulama ile dosya arasında ara düzey olarak kullanılır.
- Bir dosyadan veri okunması gerektiğinde StreamReader kullanılır.
- Verilerin bir dosyaya yazılması gerektiğinde Streamwriter kullanılır.