C#'da Akış: StreamReader ve StreamWriter [Örnek]

⚡ Akıllı Özet

AC# akışı, uygulamanız ve dosya arasında veriyi küçük parçalar halinde okumanıza veya yazmanıza olanak tanıyan bir katmandır. Burada StreamReader ve Stream'in nasıl çalıştığını öğreneceksiniz.Writer Örneklerle ve ana akım türleriyle birlikte çalışma.

  • ???? Ne olduğunu: Akış, uygulamanız ve dosya arasında ara bir katmandır.
  • ???? StreamReader: StreamReader, bir dosyadan metni satır satır veya parça parça okur.
  • ✍️ dereWriter: dereWriter Metni bir akış aracılığıyla dosyaya yazar.
  • 🧩 Akış türleri: FileStream, MemoryStream ve BufferedStream'in tüm sınıfları Stream sınıfından türetilmiştir.
  • 🤖 Yapay zekâ yardımı: GitHub Copilot gibi yapay zeka araçları, C# akış kodunu anında oluşturur.

C# Akış Okuyucu ve Writer

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.

C#'da Akış Türleri

C#'daki tüm akış sınıfları abs sınıfından türetilmiştir.tract Stream sınıfında System.IO Her tür farklı bir veri kaynağını hedef alır ancak aynı okuma ve yazma yöntemlerini paylaşır. En sık kullanılan akışlar aşağıda listelenmiştir.

  • Dosya akışı Disk üzerindeki dosyalardan tek tek bayt veya bloklar halinde okuma ve yazma işlemleri yapar.
  • Bellek Akışı Verileri dosya yerine bellekte saklar, bu da geçici tamponlar için kullanışlıdır.
  • BufferedStream Yavaş disk veya ağ işlemlerinin sayısını azaltmak için başka bir akışı sarmalar.
  • Ağ Akışı Ağ soketi üzerinden veri gönderir ve alır.

C# metinlerle çalışmak için şu özellikleri sunar: StreamReader hem de StreamWriter Akışları saran ve sonraki bölümlerde ele alınacak olan yardımcı sınıflar.

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.

Akış Okuyucusu

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();
  }
 }
}

Code Açıklama:-

  1. Ö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.
  2. Daha sonra, dosyadaki tüm verileri okumak için kullanılacak geçici bir 's' değişkenini tanımlıyoruz.
  3. 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ı:-

Akış Okuyucusu

Çı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.

dere Writer

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.

dere Writer

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();
  }
 }
}

Code Açıklama:-

  1. Ö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.
  2. "Yazma işlemi için Writeline akış yazma yöntemini kullanıyoruz ve şu satırı yazıyoruz:Guru"99 – ASP.Net" ifadesini akışa gönderir. Akıştan alınan satır daha sonra dosyaya yazılır.
  3. 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.
  4. 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ı:-

dere Writer

Çıktıdan da görebileceğiniz gibi, şu satır:Guru"99 – ASP.Net" dosyaya başarıyla eklendi. Konsolda 3 satır metnin tamamı görülebiliyor.

SSS

Akış, bir uygulama ile dosya arasında yer alan ara bir katmandır. Büyük dosyaları küçük parçalara bölerek, dosyanın tamamını belleğe yüklemeden verilerin okunmasını veya yazılmasını sağlar.

StreamReader, bir dosyadan akış yoluyla metin verilerini okur. Dosya.OpenText Bir StreamReader döndürür ve ReadLine metodu dosyayı satır satır okur.

dereWriter Metin verilerini bir akış aracılığıyla dosyaya yazar. File.AppendText bir Akış döndürür.Writerve WriteLine metodu her satırı dosyaya gönderir.

Yaygın kullanılan veri akışları arasında dosyalar için FileStream, bellekteki veriler için MemoryStream bulunur. BufferTamponlama için edStream ve soketler için NetworkStream. Hepsi abs'den türetilmiştir.tract Akış sınıfı.

FileStream, ham baytları bir dosyaya okur ve yazar; StreamReader ise metni karakter ve satır olarak okumak için bir akışı sarmalar. StreamReader, metin dosyaları için daha kolaydır.

GitHub Copilot gibi yapay zeka asistanları, otomatik tamamlama özelliğine sahip StreamReader ve Stream gibi uygulamalar sunuyor.Writer Kod yazın, atık bertarafı için using blokları ekleyin ve kısa bir yorumdan dosya okuma döngüleri oluşturun.

Evet. Yapay zeka destekli araçlar, akış okuma ve yazma yöntemleri oluşturur, büyük dosyalar için tamponlama önerir ve akışların güvenli bir şekilde kapatılması için `using` ifadeleri ekler.

`using` ifadesi, bir hata oluşsa bile, blok sona erdiğinde akışı otomatik olarak kapatır ve serbest bırakır. Bu, dosya tanıtıcısını serbest bırakır ve kaynak sızıntılarını önler.

Bu yazıyı şu şekilde özetleyin: