C# geliştiricileri için metin dosyalarını satır satır verimli bir şekilde okumak çok önemli bir beceridir. Günlükleri işliyor, yapılandırma dosyalarını ayrıştırıyor veya veri kümelerini analiz ediyor olun, seçtiğiniz yöntem performansı ve kaynak kullanımını önemli ölçüde etkileyebilir. Bu makale, belirli ihtiyaçlarınız için en uygun tekniği seçmenize yardımcı olmak üzere üç yaygın yaklaşımı, güçlü ve zayıf yönlerini vurgulayarak ele almaktadır.
İçindekiler
File.ReadLines()
KullanımıFile.ReadAllLines()
KullanımıStreamReader.ReadLine()
Kullanımı- Doğru Yöntemi Seçme
File.ReadLines()
Kullanımı
File.ReadLines()
yöntemi, özellikle büyük dosyalar için genellikle en verimli ve kullanışlı seçenektir. Bir IEnumerable
döndürür, yani dosyayı tüm içeriğini bir kerede belleğe yüklemeden satır satır işler. Bu tembel yükleme, büyük veri kümeleriyle çalışırken potansiyel OutOfMemoryException
hatalarını önler.
using System;
using System.IO;
using System.Linq;
public class ReadLinesExample
{
public static void Main(string[] args)
{
string filePath = "myFile.txt";
try
{
foreach (string line in File.ReadLines(filePath))
{
Console.WriteLine(line);
//Her satırı burada işleyin
}
}
catch (FileNotFoundException)
{
Console.WriteLine($"Dosya bulunamadı: {filePath}");
}
catch (Exception ex)
{
Console.WriteLine($"Bir hata oluştu: {ex.Message}");
}
}
}
File.ReadAllLines()
Kullanımı
File.ReadAllLines()
daha basit bir sözdizimi sunar ve tüm satırları bir dize dizisine okur. Bununla birlikte, bu yaklaşım tüm dosyayı belleğe yükler, bu da büyük dosyalar için verimsiz ve potansiyel olarak sorunlu hale getirir. Bellek tüketiminin büyük bir endişe olmadığı daha küçük dosyalar için en uygunudur.
using System;
using System.IO;
public class ReadAllLinesExample
{
public static void Main(string[] args)
{
string filePath = "myFile.txt";
try
{
string[] lines = File.ReadAllLines(filePath);
foreach (string line in lines)
{
Console.WriteLine(line);
//Her satırı burada işleyin
}
}
catch (FileNotFoundException)
{
Console.WriteLine($"Dosya bulunamadı: {filePath}");
}
catch (Exception ex)
{
Console.WriteLine($"Bir hata oluştu: {ex.Message}");
}
}
}
StreamReader.ReadLine()
Kullanımı
StreamReader.ReadLine()
en ince ayarlı kontrolü sağlar. Bir döngü kullanarak bir seferde bir satır okursunuz, bu da bir sonraki satırı okumadan önce her satırın özel işlenmesine olanak tanır. Bu yöntem, StreamReader
‘ın düzgün şekilde yok edilmesini sağlamak için bir using
deyimi kullanarak açık kaynak yönetimi gerektirir.
using System;
using System.IO;
public class StreamReaderExample
{
public static void Main(string[] args)
{
string filePath = "myFile.txt";
try
{
using (StreamReader reader = new StreamReader(filePath))
{
string line;
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line);
//Her satırı burada işleyin
}
}
}
catch (FileNotFoundException)
{
Console.WriteLine($"Dosya bulunamadı: {filePath}");
}
catch (Exception ex)
{
Console.WriteLine($"Bir hata oluştu: {ex.Message}");
}
}
}
Doğru Yöntemi Seçme
Çoğu senaryo için, özellikle büyük dosyalarla çalışırken, verimliliği ve kullanım kolaylığı nedeniyle File.ReadLines()
önerilen yaklaşımdır. File.ReadAllLines()
yalnızca daha küçük dosyalar için uygundur. StreamReader.ReadLine()
daha fazla kontrol sağlar ancak daha dikkatli kaynak yönetimi gerektirir.
Dosya bulunamadı hataları gibi potansiyel istisnaları zarif bir şekilde yönetmek için her zaman sağlam hata işlemeyi eklemeyi unutmayın.