14 Ocak 2017 Cumartesi

StreamReader Sınıfı

Giriş
Şu satırı dahil ederiz.
using System.IO;
Bu sınıfın okuduğunu yazmak için StreamWriter kullanılır.

StreamReader, TextReader'dan kalıtır. Şöyle yapabiliriz.
using(TextReader tr = new StreamReader(new FileStream(@"D:\t.txt",
  FileMode.Open))) 
{
  ...
}
StreamReader ve using
StreamReader sınıfını using ile kapatmak gerekir. StreamReader yok edilince sarmaladığı Stream nesnesini de kapatır. Açıklaması şöyle
The StreamReader object calls Dispose() on the provided Stream object when StreamReader.Dispose is called.
Şu kullanım şekli yanlıştır.
using (Stream stream = ...)
using (StreamReader reader = new StreamReader(stream)) {...}
Doğru kullanım şekli şöyledir.
Stream stream = ...;
using (StreamReader reader = new StreamReader(stream))
{
  reader.ReadToEnd();
}
Constructor - Path
Şöyle yaparız.
StreamReader sr = new StreamReader("Data.txt");
Sınıfın içinde bir FileReader nesnesi bulunur. Verilen path'i okumak için bu nesne kullanılır. Nesne şöyle tanımlıdır.
Stream stream = new FileStream(path,...);
Constructor - Path + Encoding
Şöyle yaparız.
StreamReader sr = new StreamReader(file.FullName, Encoding.UTF8)) 
Constructor - Stream
Şöyle yaparız.
Stream stream = ...;
using (var sr = new StreamReader (stream)){
  ...
}
Şöyle yaparız.
var reader = new StreamReader(File.OpenRead(@"C:\test.csv"));
Constructor - Stream + Encoding + byte order marks + buffer size + leave open
İmzası şöyle
public StreamReader(Stream stream, Encoding encoding, bool
  bool detectEncodingFromByteOrderMarks, int bufferSize, bool leaveOpen);
Varsayılan değerler şöyle

Encoding : Encoding.UTF8
detectEncodingFromByteOrderMarks : true
bufferSize : 1024
leaveOpen : false

BaseStream Alanı
Altta kullanılan Stream nesnesidir. Şöyle yaparız.
Stream s = sr.BaseStream;
EndOfStream Alanı
Şöyle yaparız.
while (!sr.EndOfStream)
{
  // Read line from the input stream
  string line = await sr.ReadLineAsync();
  ...
}
Peek metodu
Şöyle yaparız.
while (sr.Peek() > -1)
{
  string str = sr.ReadLine();
  ...
}
Read metodu
Metodun imzası şöyle. In Out parametre tanımlaması ilginç.
public override int Read([In, Out] char[] buffer, int index, int count)
{

}
ReadLine metodu
Şöyle yaparız.
string line;
while ((line = sr.ReadLine()) != null)
{...}
ReadLineAsync metodu
Şöyle yaparız.
string line = await sr.ReadLineAsync();
ReadToEnd metodu
Bu metod Stream sınıfında bulunmaz. Şöyle yaparız.
string html = reader.ReadToEnd();

Hiç yorum yok:

Yorum Gönder