C# Dosyanın Satır Sayısını Bulma

Merhabalar, C# derslerimize kaldığımız yerden devam ediyoruz. Bu dersimizde herhangi bir metin belgesinin toplam kaç satır olduğunu bulmayı anlatacağım. Hadi başlayalım !Bu işlemi Windows Forms Application uygulamasında yapalım ve forma dosya seçilebilmesi için bir tane OpenFileDialog ve işlemi içinde bir tane Button ekleyelim. Ardından Button’un Click eventini oluşturup içine girelim. Button’un Click eventini oluşturmak için form tasarım ekranından Button’a çift tıklamamız yeterli.Kullanıcıdan bir tane dosya alacağız ve bu işlemi de OpenFileDialog ile yapacağız. Öncelikle kullanıcıdan dosyayı alalım;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
string dosya = openFileDialog1.FileName;
Şimdi geldik asıl işlemi yapmaya, yani dosyanın kaç satır olduğunu bulmaya. Bunun için birden fazla yolumuz var aslında, ben yolları yazayım siz hangisini isterseniz onu kullanın 🙂1. Yol System.IO kütüphanesi altında bulunan File sınıfının altındaki static tipteki yani bulunduğu sınıfın yeni bir nesnesinin türetilmesine gerek olmayan ReadLines() fonksiyonunu kullanmak. Bu fonksiyon parametre olarak dosya yolunu istiyor ve dosyanın her satırını bir indexe atmak koşuluyla IEnumerable tipte bir veri geri döndürüyor. Elimizde dosya içeriği olduğuna ve her satır ayrı bir indexte saklandığına göre, geri dönen IEnumerable verisinin eleman sayısını bulmak bize dosyanın satır sayısını verecektir. IEnumerable verisinin eleman sayısını bulmak içinde ilgili sınıfın Count() fonksiyonunu kullanacağız. Yani şöyle;
int birinciYol = File.ReadLines(dosya).Count();
2. Yol Bu yolda da yine System.IO kütüphnaesi altındaki File sınıfının static olan ReadAllLines() fonksiyonunu kullanacağız. Bu fonksiyonda 1. yoldaki gibi her satır ayrı bir indexte olmak üzere dosyanın içeriğini bize string dizisi olarak geri döndürüyor. Yani birinci yolda IEnumerable listesi dönüyordu, bu sefer string dizisi döndü. Elbette bu dizinin eleman sayısı bize dosyanın satır sayısını verecektir.
int ikinciYol = File.ReadAllLines(dosya).Length;
3. Yol: Bu yolda File sınıfı altında bulunan static tipteki OpenText() fonksiyonunu kullanacağız. Bu fonksiyon parametre olarak string tipte dosya yolunu istiyor ve bize StreamReader nesnesi döndürüyor. StreamReader sınıfı ise dosya içerisinden okuma yapmamıza yarıyor. Burada dosyayı satır satır okuyacak ve her okumada dışarıda okuduğumuz integer tipindeki bir değişkeni arttıracağız.
int ucuncuYol = 0;
using(StreamReader reader = File.OpenText(dosya))
{
while(reader.ReadLine() != null)
ucuncuYol++;
}
4. Yol: Sonuncu olan bu yolda işi biraz daha profesyonel hale getireceğiz. Çünkü özellikle ilk iki yolda tek satır ile hallettik istediğimiz şeyi evet ama bunun dezavantajı olacaktır. Örneğin her ne kadar kısa bir süre sürecek olsada işlem esnasında ilgili dosyanın silinmesi yada farklı bir işlem tarafından kullanılması durumunda hata fırlatacak ve derlemeyi durduracaktır. Fakat bu yolda böyle bir problem olmayacak, çünkü dosyayı okumaya başlarken başka bir işlem tarafından okunuyorsa o işlem bitene kadar bekleyecek, kendisi okumaya geçtikten sonrada dosyayı kitleyecek ve başka bir işlemin aynı dosyayı okumasına izin vermeyecektir. Bu kadar işlemi yapabilmek için öncelikle FileStream nesnesi, sonra StreamReader nesnesi oluşturacağız. StreamReader nesnesi türettikten sonrası üçüncü yol ile aynı olacaktır zaten.
int dorduncuYol = 0;
using(FileStream fs = new FileStream(dosya, FileMode.Open, FileAccess.Read))
using(StreamReader reader = new StreamReader(fs))
while(reader.ReadLine() != null)
dorduncuYol++;
using ifadelerini, FileStream ve StreamReader nesnelerinin Dispose özelliği olduğu için kullandık. Bu sayede dosyayla işimiz bittiğinde bu iki nesne bellekten silinecek ve dosya kapatılmış olacaktır. Dosyayı kapatmazsak dosya bizim işlemcimiz tarafından açık bırakılacak ve o ihtiyacı olan diğer işlemlerin okumasına engel olacaktır. İşte bahsi geçen bu dosyayı kitleme işini FileStream yapıyor, StreamReader nesnesi ise dosyadan okuma yapıyor ve her satır okumada dorduncuYol adını verdiğim değişkenin değeri 1 artıyor. Tüm işlemler sonucunda dorduncuYol değişkeninde dosyanın satır sayısı olacaktır.Bir dosyanın satır sayısını bu 4 yoldan birini seçerek öğrenebilirsiniz. Özel bir dosya kullanacaksanız yani dosyanın siz okuma işlemi yaparken başka bir işlem tarafından kullanılmayacağından eminseniz ilk 2, emin değilseniz son 2 yoldan birini kullanabilirsiniz.
Evet bu dersimizinde sonuna geldik, tüm C# derslerimize buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.